正则表达式:如何查找字符串后跟非字母数字

时间:2017-10-25 15:46:47

标签: php regex preg-replace

我试图使用正则表达式(在php中)查找一个特定的字符串,后面必须跟一个非字母数字字符(不区分大小写)。

Example String:
Doggy is a lazy dog! Doggy. Dog and I.

Search String: Dog

Expected Result:
Doggy is a lazy <a href="">dog</a>! Doggy. <a href="">Dog</a> and I.

所以它不应该与“狗狗”相匹配。因为Dog子字符串后面跟不是非字母数字字符。

我在这些方面尝试了一些东西,但它并没有完全符合我的要求。

preg_replace("/(dog)[^a-zA-Z0-9\s\p]/i/", "", $str);

2 个答案:

答案 0 :(得分:4)

听起来像你

不一定&#34;字符串后跟非字母数字&#34;。

您可以使用\b&#34;字边界&#34;来实现此目的。正则表达式锚:

$search = "dog"
preg_replace("/\b".$search."\b/i", "", $str);

答案 1 :(得分:1)

你的正则表达式几乎是正确的,但有一些错误:

  1. 我假设您希望将Dog与其后的空格匹配,如果是,请删除\s
  2. \p不是有效的正则表达式字符。
  3. \i之后你不应该有一个额外的斜线。 \i\ - &gt; \i
  4. 您的正则表达式的方式是,它会删除非字母数字字符,您可以通过将其包含在捕获组中来解决此问题。
  5. 您也没有代码可以添加锚标记(<a href=""></a>)。

    所以,我已经把所有这些都编成了以下声明:

    preg_replace("/(dog)([^a-zA-Z0-9])/i", '<a href="">$1</a>$2', $str);
    

    返回:

    Doggy is a lazy <a href="">dog</a>! Doggy. <a href="">Dog</a> and I.