如何找到含有方括号的字符串?(how to find a string containing a s

2019-10-16 14:56发布

我使用正则表达式来搜索文本一堆关键字。

所有的关键字找到,但一个:[DAM]柏林。 我知道它包含了一个括号,所以我逃跑了,但仍然没有运气。 我究竟做错了什么?

这里是我的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);

谢谢您的帮助 !

Answer 1:

我想这是因为[是不是一个“单词字符”,那么\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';

编辑:从丹尼尔·詹姆斯的评论:

这可能是更接近原意,因为它仍然会检查“[大坝]”不遵循单词字符:

 $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'; 


Answer 2:

您正则表达式的第一部分是“/(?![^ <] +>)\ B”这样岂不是只能匹配“[DAM]柏林画廊”,如果之前的字符是一个“>”?

尝试:

$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个改性剂]把字符串作为在末端仅具有单个换行字符,即使有在我们的字符串多个新行”。



文章来源: how to find a string containing a square bracket?