0

milk文字列の前に 4 つの特定の単語 (簡単にするために、AA、BB、CC、DD と呼びます) のいずれかまたはすべてがない場合にのみ、一致が必要です。

したがってI went to the store and bought some milk、一致しますが、次の場合は一致しません。

AA went to the store and bought some milkまたBBCCDDmilk

別の言い方をすれば、次の反対の応答を得るにはどうすればよいですか。/.*?(AA|BB|CC|DD).*?milk/

どこかにキャレットを置くべきだと思いますが、それを理解できませんでした。ありがとうございました。

4

1 に答える 1

1

説明

この正規表現は、指定されたテキストの各行を検証して、単一行の文字列 milk の前に文字列 {aa, bb, cc, dd} がないことを確認します。その後、一致する行が返されます。注: OP の例は、一致した「単語」が単なる文字列であり、空白と単語の境界が重要ではないことを示しています。

^(?!.*?(?:AA|BB|CC|DD).*?milk).*

  • ^この一致を行の先頭に固定します
  • (?!否定的な先読みを開始します。コンテンツが正常に一致した場合、失敗します
  • .*?(?:AA|BB|CC|DD).*?milkaa bb cc dd の後に文字列 milk が続く文字列を探します
  • )先読みを終了する
  • .*文全体に一致

ここに画像の説明を入力

PHP コード例:

入力テキスト

AA went to the store and bought some milk
BBCCDDmilk
I went to the store and bought some milk
Aardvarks like milk

コード

<?php
$sourcestring="your source string";
preg_match_all('/^(?!.*?(?:AA|BB|CC|DD).*?milk).*/im',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>

マッチ

$matches Array:
(
    [0] => Array
        (
            [0] => I went to the store and bought some milk
        )

)
于 2013-06-21T13:31:07.800 に答える