0

我有这些名字:

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ÉS BARÉA

我使用了这个正则表达式:(.*) (.[A-Z]{2,100} .[A-Z]{2,100})

有人可以帮忙吗?

4

4 回答 4

4

根据 \p{Lu}应该匹配任何大写字母。因此,将您的正则表达式替换为如下内容:(.*) (.\p{Lu}{2,100} .\p{Lu}{2,100})应该可以。

我做了一些修改,这应该使您的正则表达式更加宽容。(\p{Lu}{2,100}( \p{Lu}{2,100})?). 然而,我没有使用 PHP 的经验,所以我无法正确测试它。

但是,我已经在 J​​ava 环境中对其进行了测试,并且对我有用。

于 2012-05-04T12:34:36.680 回答
0

我会使用:

([A-ZÁÉÍÓÚÜ]{2,})

然后使用以下方法连接匹配项:

$result = implode(" ", $matches);
于 2012-05-04T12:39:52.933 回答
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 这样的一些名字是混合大小写的,你也支持这些吗?

于 2012-05-04T13:05:38.690 回答
0

你的第一个(.*)应该是非贪婪的,像这样:(.*?),这样它就不会开始接受来自名称大写部分的字母。

然后正如其他人提到的,您可以将范围扩展[A-Z][A-ZÁÉÍÓÚÜ]

于 2012-05-04T13:08:12.403 回答