我有这些名字:
John Stuart AGNEW
Magdi Cristiano ALLAM
Josefa AÉNDRÉS BARÉA
Josefa ANDRES BAREA
Laima Liucija ANDRIKIENĖ
我希望获得具有所有大写字符的名称
例如,对于John Stuart AGNEW
我想要 AGNEW
我遇到Josefa AÉNDRÉS BARÉA
的问题。我想获得AÉNDRÉSBARÉA
我使用了这个正则表达式:(.*) (.[A-Z]{2,100} .[A-Z]{2,100})
有人可以帮忙吗?
答案 0 :(得分:4)
根据this \p{Lu}
应该匹配任何大写字母。因此,将正则表达式替换为类似的结果:(.*) (.\p{Lu}{2,100} .\p{Lu}{2,100})
应该可以正常工作。
我做了一些修改,这会使你的正则表达式稍微宽容一些。 (\p{Lu}{2,100}( \p{Lu}{2,100})?)
。但是我没有使用PHP的经验,所以我无法正确测试它。
答案 1 :(得分:0)
我会用:
([A-ZÁÉÍÓÚÜ]{2,})
然后使用:
连接匹配项$result = implode(" ", $matches);
答案 2 :(得分:0)
我尝试了这个,它可能就是你需要的
<?php
$s = 'John Stuart AGNEW
Magdi Cristiano ALLAM
Josefa AÉNDRÉS BARÉA
Josefa ANDRES BAREA
Laima Liucija ANDRIKIENE
Ronald McDONALD
';
$pat = "/\p{Lu}{2,}.*/";
preg_match_all( $pat, $s, $ms);
foreach( $ms[0] as $m){
echo $m . "<br />\n";
}
?>
请注意,像McDONALD这样的名字是混合案例,您是否也支持这些?
答案 3 :(得分:0)
您的第一个(.*)
应该是非贪婪的,例如:(.*?)
,这样就不会开始接受来自名称大写部分的字母。
然后正如其他人所提到的,您可以将范围[A-Z]
扩展为[A-ZÁÉÍÓÚÜ]