加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式匹配字符串中的单词或短语但不匹配URL或内部标记的一

发布时间:2020-12-14 06:31:59 所属栏目:百科 来源:网络整理
导读:我知道正则表达式不适合与HTML字符串一起使用,我已经看过PHP Simple HTML DOM Parser,但仍然相信这是要走的路.所有HTML标签都将由我的论坛软件生成,因此它们将是一致且有效的HTML. 我想要做的是制作一个插件,它将在HTML字符串中找到一个关键字(或短语)列表,
我知道正则表达式不适合与HTML字符串一起使用,我已经看过PHP Simple HTML DOM Parser,但仍然相信这是要走的路.所有HTML标签都将由我的论坛软件生成,因此它们将是一致且有效的HTML.

我想要做的是制作一个插件,它将在HTML字符串中找到一个关键字(或短语)列表,并用我指定的链接替换它们.例如,如果有人输入:

I use Amazon for that.

它将取代它:

I use <a href="http://www.amazon.com">Amazon</a> for that.

问题当然是如果“亚马逊”在URL中,它也会被替换.我用这个网站上的回调函数解决了这个问题,略有修改.

但是现在我还有一个问题,它仍然取代了开始和结束标签之间的单词.

<a href="http://www.amazon.com">My Amazon Link</a>

它将匹配“我的亚马逊链接”中的“亚马逊”

我真正需要的是一个正则表达匹配说“亚马逊”在任何地方除了< a href和< / a>之间

有任何想法吗?

使用DOM肯定是更可取的.

但是,你可能会逃避这个:

$result = preg_replace('%Amazon(?![^<]*</a>)%i','<a href="http://www.amazon.com">Amazon</a>',$subject);

它只匹配亚马逊

>它后面没有关闭< / a>标签,
>它本身不是标签的一部分,
>没有介入标签,i.即如果标签可以嵌套在< a>内,它将被抛弃标签.

因此会改变这个:

I use Amazon for that.
I use <a href="http://www.amazon.com">Amazon</a> for that.
<a href="http://www.amazon.com">My Amazon Link</a>
It will match the "Amazon" in "My Amazon Link"

进入这个:

I use <a href="http://www.amazon.com">Amazon</a> for that.
I use <a href="http://www.amazon.com">Amazon</a> for that.
<a href="http://www.amazon.com">My Amazon Link</a>
It will match the "<a href="http://www.amazon.com">Amazon</a>" in "My <a href="http://www.amazon.com">Amazon</a> Link"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读