1

正規表現を使用して、テキスト内の一連のキーワードを検索しています。

[DAM]Berlin を除くすべてのキーワードが見つかりました。角かっこが含まれていることはわかっているので、エスケープしましたが、それでもうまくいきません。私は何を間違っていますか?

これが私のphpコードです。

キーワードを検索するテキスト:

$textToSearch= '<p><br>
Time ¦ emit LAb[au] <br>
<br>
[DAM]Berlin gallery<br>
<br>
Exhibition: February 21st - March 28th, 2009 <br>
<br>
Opening: Friday,  February 20th, 2009 7-9 pm <br>';

正規表現:

$find='/(?![^<]+>)\b(generative art console|Game of Life|framework notations|framework|Floating numbers|factorial|f5x5x3|f5x5x1|eversion|A-plus|16n|\[DAM\]Berlin gallery)\b/s';

置換コールバック関数:

function replaceCallback( $match )
{
      if ( is_array( $match ) )
      {
        $htmlVersion = htmlspecialchars( $match[1], ENT_COMPAT, 'UTF-8' );
        $urlVersion  = urlencode( $match[1] );
        return '<a class="tag" rel="tag-definition" title="Click to know more about ' . $htmlVersion . '" href="?tag=' . $urlVersion. '">'. $htmlVersion  . '</a>';
      }
      return $match;
}

そして最後に、呼び出し:

$tagged_content = preg_replace_callback($find, 'replaceCallback',  $textToSearch);

ご協力ありがとうございました !

4

2 に答える 2

3

[は「単語文字」ではないため、 の先頭に\b[一致しないためだと思います。おそらく、正規表現を次のように変更する必要があります。[[DAM]Berlin

$find='/(?![^<]+>)(\b(?:generative art console|Game of Life|framework notations|framework|Floating numbers|factorial|f5x5x3|f5x5x1|eversion|A-plus|16n)|\[DAM\]Berlin gallery)\b/s';

編集:ダニエル・ジェームズのコメントから:

これは、'[Dam]' が単語の文字に続いていないことを引き続きチェックするため、元の意図に近い可能性があります。

$find='/(?![^<]+>)(?<!\w)(generative art console|Game of Life|framework notations|framework|Floating numbers|factorial|f5x5x3|f5x5x1|eversion|A-plus|16n|\[DAM\]Berlin gallery)\b/s';
于 2009-06-20T13:22:21.303 に答える
1

Regex の最初のセクションは '/(?![^<]+>)\b' で、その前の文字が '>' の場合、"[DAM]Berlin gallery" にしか一致しませんか?

試す:

$find='/(?![^<]+>)\b(generative art console|Game of Life|framework notations|framework|Floating numbers|factorial|f5x5x3|f5x5x1|eversion|A-plus|16n|\[DAM\]Berlin gallery)\b/sm'

m 修飾子を正規表現に追加して、新しい行を無視するようにします

http://www.phpro.org/tutorials/Introduction-to-PHP-Regex.html#8

「[m 修飾子] は、文字列に複数の改行がある場合でも、最後に 1 つの改行文字しかないものとして文字列を扱います。」

于 2009-06-20T13:52:43.630 に答える