正则表达式在指定标签之外搜索

时间:2013-08-01 22:39:55

标签: php regex regex-lookarounds

我需要使用正则表达式来提取不受某些标记(<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标签之外的内容。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

试试这个正则表达式,它对我有用:

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

抱歉不得不修复它,那些在线正则表达式工具看起来不那么可靠:) 这就是我开始工作的原因:

$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]);

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