0

私はこれらの名前を持っています:

John Stuart AGNEW
Magdi Cristiano ALLAM
Josefa AÉNDRÉS BARÉA 
Josefa ANDRES BAREA
Laima Liucija ANDRIKIENĖ

すべて大文字の名前を取得したい

たとえば、AGNEWJohn Stuart 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の経験がないため、適切にテストできません。

ただし、Java環境でテストしたところ、うまくいきました。

于 2012-05-04T12:34:36.680 に答える
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ÁÉÍÓÚÜ]{2,})

次に、次を使用して一致を連結します。

$result = implode(" ", $matches);
于 2012-05-04T12:39:52.933 に答える
0

あなたの最初のものは、次(.*)のように非貪欲にする必要があります: (.*?)、これにより、名前の大文字部分からの文字の受け入れが開始されません。

そして、他の人が述べたように、範囲[A-Z]を次のように拡張できます[A-ZÁÉÍÓÚÜ]

于 2012-05-04T13:08:12.403 に答える