2

次のような文字列があるとしましょう。

A quick brOwn FOX called F. 4lviN

検索したい単語には、次の条件が必要です。

  • 混合された大文字と小文字を含む単語
  • A から Z (AZ az) までのアルファベットのみを含む
    (例: 数字なし、コンマなし、ピリオドなし、ダッシュ .. など)

したがって、(たとえば、この文字列で) 検索すると、検索結果は次のようになります。

brOwn

大文字と小文字の両方を含む (そしてアルファベットのみを含む) 唯一の単語だからです。

では、どうすればそれをphpで動作させることができますか?

4

3 に答える 3

5

あなたは得意でなければなりません:

preg_match_all("/\b([a-z]+[A-Z]+[a-zA-Z]*|[A-Z]+[a-z]+[a-zA-Z]*)\b/", $input, $matches);
print_r($matches[1]); 

編集:キャプチャは必要ないので、それもできます>>

preg_match_all("/\b(?:[a-z]+[A-Z]+[a-zA-Z]*|[A-Z]+[a-z]+[a-zA-Z]*)\b/", $input, $matches);
print_r($matches[0]); 
于 2012-07-21T16:28:59.017 に答える
2

Ωmegaの答えはうまくいきます。楽しみのために、先読みを使用してトリックを実行する別の (コメント付きの) 正規表現を次に示します。

<?php // test.php Rev:20120721_1400
$re = '/# Match word having both upper and lowercase letters.
    \b               # Assert word begins on word boundary.
    (?=[A-Z]*[a-z])  # Assert word has at least one lowercase.
    (?=[a-z]*[A-Z])  # Assert word has at least one uppercase.
    [A-Za-z]+        # Match word with both upper and lowercase.
    \b               # Assert word ends on word boundary.
    /x';

$text ='A quick brOwn FOX called F. 4lviN';

preg_match_all($re, $text, $matches);
$results = $matches[0];
print_r($results);
?>
于 2012-07-21T20:36:12.827 に答える
0

次のような単純な正規表現を使用できます。

/\s[A-Z][a-z]+\s/

それは次のように使用できます:

preg_match_all('/\s[A-Z][a-z]+\s/', 'A quick Brown FOX called F. 4lvin', $arr);

次に、すべての一致が追加された $arr 変数には、これらの単語の配列が含まれます。

Array
(
    [0] => Array
    (
        [0] => Brown
    )

)

編集:パターンを変更しました。

于 2012-07-21T16:30:39.687 に答える