0

PHPのpreg_match関数の正規表現を構築しようとしましたが、この種のロジックは本当に苦手です。

単語のリストがあります。つまり、次のとおりです。

「これは私のテストだ」「テストは良いことだ」「これは良い本だ」

目標は、特定の単語がリストに存在するかどうかを知ることです。たとえば、「はい」、「テスト」、または「本」という単語を取得したいのですが、それらが完全な単語であり、テストを見つけるための「my-test」のような合成単語ではない場合にのみ...

正規表現は、検索された単語がスペースの間、文字列の先頭または末尾にあるかどうかをテストする必要があります。しかし、正しい方法が見つかりません。

私はこれから始めました:

"/^.+ (yeah|test|book|) .+/"

しかし、次のようなテストを作成する方法がわかりません:単語が最初または最後の場所にある場合、または単語がスペースの間にある場合...次のようなことを考えます:

"/(^.+ |^)(yeah|test|book)( .+|)"

どんな助けでも大歓迎です。

前もって感謝します。

4

1 に答える 1

0

使用できるパターンは次のとおりです。

$pattern = "/\b(yeah|test|book)/";

単語境界\b用です。

例:

$a = "this is my-test yeah";
$b = "test is a good thing";
$c = "this is a good book";

preg_match($mine,$a,$m1);
preg_match($mine,$b,$m2);
preg_match($mine,$c,$m3);

var_dump($m1,$m2,$m3);

これは印刷されます:

array(2) {
  [0]=>
  string(4) "test"
  [1]=>
  string(4) "test"
}
array(2) {
  [0]=>
  string(4) "test"
  [1]=>
  string(4) "test"
}
array(2) {
  [0]=>
  string(4) "book"
  [1]=>
  string(4) "book"
}

アップデート

単語境界はmy-test2 単語であると見なされているため、ここで私が提案するのは次のとおりです。

  1. 最初に文字列置換を実行してダッシュを削除します
  2. 正規表現パターンを実行します。

    $a = str_replace("-","",$a); preg_match($mine,$a,$m1);

これはあなたが得る出力です:

array(2) {
  [0]=>
  string(4) "yeah"
  [1]=>
  string(4) "yeah"
}
于 2012-11-29T18:10:26.940 に答える