0

次の文字列があります。

Beyonce Knowles is married to Jay-Z and KANYE WEST is awesome and San Antonio Texas is great but not as good as West Palm Beach, FL

Beyonce KnowlesJay-ZKANYE WESTWest Palm Beach, FLおよびSan Antonio Texas(区切り)を抽出する必要があります

私はまだ正規表現に慣れていませんが、これまでのところ'/^[A-Z]+/

取得しようとしている抽出された単語を考慮して正規表現を修正するにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

これを試すことができます:

/\p{Lu}+\p{L}*(?:[\s\p{P}]+\p{Lu}+\p{L}*)*/u

これは、1 つ以上の大文字の後に 0 個以上の小文字が続き、場合によっては複数回繰り返され、1 つ以上の空白または句読点で区切られたものと一致します。Unicode 文字クラスを利用するため、他の言語のテキストを処理できます。

または、このようなパターンを 2 つ続けて一致させるには、次のようにします。

/\p{Lu}+\p{L}*[\s\p{P}]+\p{Lu}+\p{L}*/u

例えば:

$input = 'Beyonce Knowles is married to Jay-Z and KANYE WEST is awesome and San Antonio Texas is great but not as good as West Palm Beach, FL';
$pattern = '/\p{Lu}+\p{L}*(?:[\s\p{P}]+\p{Lu}+\p{L}*)*/u';
preg_match_all($pattern, $input, $output_array);

配列を生成します。

Array
(
    [0] => Array 
        (
            [0] => Beyonce Knowles
            [1] => Jay-Z
            [2] => KANYE WEST
            [3] => San Antonio Texas
            [4] => West Palm Beach, FL
        )
)
于 2013-08-17T20:26:48.877 に答える