PHP 正则表达式获取大写名称


PHP Regex get UPPERCASE Name

我有这些名字:

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ÁÉÍÓÚÜ]