2017-08-15 8 views
2

は、私はこのようなPHPや正規表現を使用して2つの文を比較しようとしています:PHP正規表現の整合文

$data = "I am a happy man with 20 kids"; 
if (preg_match('/^(?=.*I)(?=.*am)(?=.*happy)(?=.*with)(?=.*2)(?=.*kids)/i', $data)) {echo 'match';} else {echo 'not match';} 

$data = "I am a happy man with 2 kids"; 
if (preg_match('/^(?=.*I)(?=.*am)(?=.*happy)(?=.*with)(?=.*2)(?=.*kids)/i', $data)) {echo 'match';} else {echo 'not match';} 

をし、それが正常に動作するようだが、私はに文を変更した場合それはまだ一致していると言っています。問題は、正確な数字と一致しておらず、もう1つの文の数字が2であるかどうかをチェックすることだけです。

答えて

4

単語の境界を追加します。

$data = "I am a happy man with 20 kids"; 
if (preg_match('/^(?=.*I)(?=.*am)(?=.*happy)(?=.*with)(?=.*\b2\b)(?=.*kids)/i', $data)) { 
//             here ___^^ ^^ 
    echo 'match'; 
} else { 
    echo 'not match'; 
} 

あなたは、各先読みにも追加したいかもしれませんが、正規表現は

$data = "I am a happy man with 20 kids"; 
if (preg_match('/^(?=.*\bI\b)(?=.*\bam\b)(?=.*\bhappy\b)(?=.*\bwith\b)(?=.*\b2\b)(?=.*\bkids\b)/i', $data)) { 
    echo 'match'; 
} else { 
    echo 'not match'; 
} 
unredableになります