我需要使用正则表达式来提取不受某些标记(<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);
?>
我已经尝试过上面的结果,但没有运气来捕捉ins
和del
标签之外的内容。
有什么想法吗?
答案 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]);
结果: 这篇文章给人一种沙漠中真正的国王的印象