我正在使用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和正则表达式有很多陷阱。
以下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类型的变量,我将其替换为一个值。 参…