preg_replace排除<a href='''> </a> PHP - php

我正在使用preg_replace来替换带有href标签的文本中的关键字,我的正则表达式工作非常好,现在我的代码是:

$newstring2 = preg_replace("/\p{L}*?".preg_quote($match[$i])."\p{L}*/ui", "<a href='".$url."' class='link'>$0</a>", $newstring);

唯一的问题是,我需要排除<a href='https://keyword.cz' title="keyword">keyword</a>中的所有关键字

这就是我发现的https://stackoverflow.com/a/22821650/4928816

那么,有人可以帮助我将这两个正则表达式合并在一起吗?

例:

$text = 'this is sample text about something what is text.'
$keyword = 'text'

现在,由于我的正则表达式,我得到了:

$text= 'this is sample <a href='somelink.php'>text</a> about something what is <a href='somelink.php'>text</a>.'

但是如果文字是:

$text= 'this is sample <a href='text.php'>text</a> about something what is <a href='somelink.php'>text</a>.'

例如,这就是我得到的:

$text= 'this is sample <a href='<a href='somelink.php'>text.php</a>'><a href='somelink.php'>text</a></a> about something what is <a href='somelink.php'><a href='somelink.php'>text</a></a>.'

更新:
我为什么需要这个。
正在使用功能将特定博客帖子中的所有关键字替换为特定URL,并将其标记为完整。
例如

$keyword = 'key';

我需要查找整个世界并将其替换为href标签,例如:
键,关键字,关键字,键锁,mykey,键或带有UNICODE支持的KeY,关键字

参考方案

如果必须使用正则表达式,我认为PCRE动词是您的最佳选择。排除所有链接,然后搜索带有单词边界的术语。

<a[\S\s]+?<\/a>(*SKIP)(*FAIL)|\bTERM\b

演示:https://regex101.com/r/KlE1kc/1/

一个有缺陷的例子是,如果a中曾经​​有一个</a>。例如onclick='write("</a>")'解析器确实是最好的方法。 HTML和正则表达式有很多陷阱。

PHP PDO组按列名称查询结果 - php

以下PDO查询返回以下结果:$db = new PDO('....'); $sth = $db->prepare('SELECT ...'); 结果如下: name curso ABC stack CDE stack FGH stack IJK stack LMN overflow OPQ overflow RS…

验证IBAN PHP - php

在设计新平台时,我们尝试集成IBAN编号。我们必须确保IBAN已经过验证,并且存储在数据库中的IBAN始终正确。那么验证数字的正确方法是什么? 参考方案 正如我在其他问题中解释的逻辑一样,我尝试自己创建一个函数。根据Wikipedia文章中解释的逻辑,在下面找到合适的功能。国家特定验证。它适合吗http://en.wikipedia.org/wiki/Int…

PHP preg_replace删除字符串中的第一个HTML元素 - php

我想在PHP中删除html字符串(始终是一个段落)的整个第一个元素。我目前的方法是使用:$passage = preg_replace('/.*?\b'.'</p>'.'\b/s', '', $passage, 1); 由于</p>中的特殊字符,此方法不起…

GAPI PHP,总访问次数有变化吗? - php

很抱歉,这个话题复活了,但是我也有同样的疑问。我使用的是gapi,目前“ 2013年10月23日”,谷歌更改了如何获取数据。我无法获得全部访问。我只需要访问我的网站的总次数,仅此而已。这是我正在使用的代码:<?php define('ga_email','[email protected]'); define(�…

PHP:Preg_replace,单词边界和非单词字符 - php

我需要替换文本中以井号(#)开头的单词。好吧,我知道如何替换整个单词。preg_replace("/\b".$variable."\b/", $value, $text);由于该\ b修饰符仅接受单词字符,因此不会替换包含井号的单词。我有这个html,其中包含#companyName类型的变量,我将其替换为一个值。 参…