Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_替换<;之外的关键字;strong>;标签_Php_Regex - Fatal编程技术网

Php preg_替换<;之外的关键字;strong>;标签

Php preg_替换<;之外的关键字;strong>;标签,php,regex,Php,Regex,我不能告诉你们我花了多少时间在这个上面。我只想忽略强标记之间的任何关键字实例。无论它们是直接在标签旁边,还是在标签和其他单词之间。同时保持关键字不区分大小写 例如: The man drove in his car. Then <strong>the man walked to the boat.</strong> 您可以使用for仅替换明显位于非相同分隔符外部的内容: <strong>.*?<\/strong>(*SKIP)(*FAIL)|\

我不能告诉你们我花了多少时间在这个上面。我只想忽略强标记之间的任何关键字实例。无论它们是直接在标签旁边,还是在标签和其他单词之间。同时保持关键字不区分大小写

例如:

The man drove in his car. Then <strong>the man walked to the boat.</strong> 
您可以使用for仅替换明显位于非相同分隔符外部的内容:

<strong>.*?<\/strong>(*SKIP)(*FAIL)|\b(boat|car)\b
*?(*跳过)(*失败)|\b(船|车)\b

以下是一份:

$str=“那人开着他的车。然后,那人走向小船。”;
$keywords=数组('boat','car');
$p=内爆(“|”,数组映射('preg_quote',$keywords));
$result=preg#u replace(“#*?(*跳过)(*失败)|\b($p)\b#i”,“gokart”,“$str”);
回声$结果;

注意在这种情况下,我们很可能对SKIP-FAIL块(我最初发布的,请参阅修订历史)内的解决方案不感兴趣,因为我们不关心分隔符之间的内容。

Regex可能不是这样做的最佳方式

最好使用DOM解析器或类似的工具来正确查找
标记


这里的一些答案提供了一些很好的选择:

你能提供一些关于
跳过
失败
的信息吗?@npinti:我添加了答案的链接,
跳过失败
正则表达式“技巧”(没有魔法暗示:))我想每个人都同意正则表达式接近巫术,你甚至有善与恶:P。感谢你的链接,非常有用。在我几十年的研究中,我遇到了SKIP/FAIL。我甚至尝试过(当然是不恰当的)。我将阅读更多的内容,并希望了解更多关于正则表达式。不管怎样,你的答案很有效。答案被接受。如果有什么安慰的话,你真的可以帮助某人今晚睡得更好。感谢您花时间提供帮助。您提供链接的问题不是替换文本,而是匹配。OP问题没有答案。是的,但是PHP
preg_replace
会对匹配项进行替换。非常相关。
<strong>.*?<\/strong>(*SKIP)(*FAIL)|\b(boat|car)\b
$str = "The man drove in his car.Then <strong>the man walked to the boat.</strong>"; 
$keywords = array('boat','car');
$p = implode('|', array_map('preg_quote', $keywords));
$result = preg_replace("#<strong>.*?<\/strong>(*SKIP)(*FAIL)|\b($p)\b#i", "gokart", $str);
echo $result;