Regex在指定标记之外进行搜索


Regex to search outside of specified tags

我需要使用正则表达式来提取不受某些标记(<ins><del>)约束的值。例如:

<?php
$a = "this text <ins>is designed to</ins> give the impression of a real king <ins> cobra </ins> in desert";
preg_match_all("/(?<!<del>|<ins>)(.+)(?!<'/del>|<'/ins>)/", $a, $matches);
var_dump($matches);
?>

我在上面的环视中尝试过,但没有成功地捕捉到insdel标签之外的内容。

有什么想法吗?

如果您需要这些标记之外的文本,您可以使用与<ins>.*?</ins><del>.*?</del>匹配的regexp来拆分字符串,甚至可以完全删除它们。你将留下周围的文字。我认为在这种情况下,使用查找可能会使问题过于复杂。

试试这个regexp,它对我有用:

"/([^<>]+)|(?:<ins>[^<>]*<'/ins>)/"

很抱歉不得不修复它,那些在线regexp工具看起来并不那么可靠:)这就是我让它发挥作用的原因:

$string = 'this text <ins>is designed to</ins> give the impression of a real king <ins> cobra </ins> in desert';
preg_match_all('/([^<>]+)|(?:<ins>[^<>]*<'/ins>)/', $string, $match);
echo implode('', $match[1]);

结果:这篇文章给人的印象是沙漠中真正的国王