我有这些名字:
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-Z]{2,100} .[A-Z]{2,100})
有人可以帮忙吗?
根据此'p{Lu}
应匹配任何大写字母。因此,将您的正则表达式替换为类似以下内容:(.*) (.'p{Lu}{2,100} .'p{Lu}{2,100})
应该有效。
我做了一些修改,应该使您的正则表达式稍微宽容一些。 ('p{Lu}{2,100}( 'p{Lu}{2,100})?)
.但是我没有PHP经验,所以我无法正确测试它。
但是,我已经在 Java 环境中对其进行了测试,它对我有用。
我会使用:
([A-ZÁÉÍÓÚÜ]{2,})
然后使用以下方法连接匹配项:
$result = implode(" ", $matches);
我试过这个,这可能是你需要的
<?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";
}
?>
请注意,像麦当劳这样的一些名字是混合案例,你也会支持这些吗?
你的第一个(.*)
应该变得不贪婪,就像这样:(.*?)
,这样就不会开始接受来自名称大写部分的字母。
然后正如其他人提到的,您可以将范围[A-Z]
扩展到[A-ZÁÉÍÓÚÜ]