正则表达式切割字符串直到特殊字符

时间:2013-07-24 15:51:13

标签: regex html-parsing preg-replace

我有一个像onclick=window.location='abc.html'> lala的代码,我想制作一个正则表达式来削减它以满足以下要求:

  1. 如果有>,则结果应为> lala
  2. 如果没有>那么字符串会被剪切到空格,结果只会是lala
  3. 我已经完成了以下preg_replace,但我错了,问题是什么?

    $text=preg_replace('/(onclick)(.*?)(>|\s)/','',$text);
    

3 个答案:

答案 0 :(得分:0)

<?php
echo preg_replace('/(onclick)(.*?)((?=>)|\s)/','',"onclick=window.location='abc.html'> lala");
echo preg_replace('/(onclick)(.*?)((?=>)|\s)/','',"onclick=window.location='abc.html' lala");
?>

你必须搜索&gt;向前看,所以它不会被捕获和替换。 (=&GT;?)

答案 1 :(得分:0)

$text = preg_replace('/onclick.+?((\s|>).+)/', "$1", $text);

答案 2 :(得分:0)

一种干净的方法是使用DOM,例如:

$doc = new DOMDocument();
@$doc->loadHtml($yourHtmlDocument);
$xpath = new DOMXPath($doc);
$tags = $xpath->query("//*[@onclick]");
foreach ($tags as $tag) {
    $tag->removeAttribute('onclick');
}
$result = $doc->saveHtml();