在字符串中查找所有大写单词的PHP正则表达式

3

PHP正则表达式查找字符串中的所有大写单词:

$string = "test sample test: 2015. ŽYDRŪNAS PAVARDENIS";

preg_match_all('/\b([A-Z-][\p{L}\pL]+)\b/', $string, $matches);

var_dump($matches);

输出:

array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(8) "YDRŪNAS"
    [1]=>
    string(10) "PAVARDENIS"
  }
  [1]=>
  array(2) {
    [0]=>
    string(8) "YDRŪNAS"
    [1]=>
    string(10) "PAVARDENIS"
  }
}

问题是符号'Ž'去哪了?

如何修改regex表达式,以便不删除UTF-8符号?

在线代码:代码


尝试在结束的 / 分隔符后添加 u 修饰符。 - Franz
1
“Ž”没有被捕获,因为您的正则表达式指定匹配必须以大写字母A到Z或破折号(“-”)开头。此外,“\p{L}”等同于“\pL”(您可以使用任何一个),它包括小写字母。 - axiac
1个回答

5
基本上,当使用Unicode字符串时,您需要使用修饰符u选项。然而,正则表达式也可以使用:upper:字符类进行简化,因为它将匹配所有大写的Unicode字符。
像这样:
$string = "test sample test: 2015. ŽYDRŪNAS PAVARDENIS";

preg_match_all("/[[:upper:]]+/u", $string, $matches);
var_dump($matches);

输出:

array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(10) "ŽYDRŪNAS"
    [1]=>
    string(10) "PAVARDENIS"
  }
}

演示


@Rizier123 不错的编辑!我也在寻找关于u选项文档的链接。你比我快!同时,有趣的是它只适用于PHP >= 5.3版本。我本以为这个功能在早期的PHP版本中也可用。 - hek2mgl
没有太多需要编辑的,答案已经非常好了 :) - Rizier123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接