Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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
用正则表达式删除HTML_Html_Regex - Fatal编程技术网

用正则表达式删除HTML

用正则表达式删除HTML,html,regex,Html,Regex,我不能使用任何PHP代码,因为正则表达式用于我购买的脚本(只有一个文本框需要输入正则表达式) 我试着用正则表达式在锚之间刮取内容 在下面的HTML段中突出显示“”&“”: 但是当我尝试这个正则表达式时,它没有返回任何结果 <h2\b[^>]*>.*?<\/h2>[(&nbsp;)\t\s]*(.*?)[(&nbsp;)\t\s]*<\/div> ]*>.*?[()\t\s]*(.*?[()\t\s]* 我认为这可能与HTML源代码中的

我不能使用任何PHP代码,因为正则表达式用于我购买的脚本(只有一个文本框需要输入正则表达式)

我试着用正则表达式在锚之间刮取内容 在下面的HTML段中突出显示“
”&“
”:

但是当我尝试这个正则表达式时,它没有返回任何结果

<h2\b[^>]*>.*?<\/h2>[(&nbsp;)\t\s]*(.*?)[(&nbsp;)\t\s]*<\/div>
]*>.*?[()\t\s]*(.*?[()\t\s]*
我认为这可能与HTML源代码中的空白有关

任何正则表达式大师都能给我一个神奇的表达式来抓取任何给定HTML Archor之间的所有内容,比如上面提到的那些(也可以处理HTML源代码中的任何空白)

非常感谢

HTML段

<div id="Highlights">

      <h2>Highlights</h2>

      <ul>

<li>1234</li>

<li>abc def asdasd asdasd</li>

<li>asdasda as asdasdasdas </li>

<li>asdasd asdasdas asdsad asdasd asa</li>

</ul>





     </div>

     <div class="FloatClear"></div>

     <div id="SalesMarquee">

      <div id="SalesMarqueeTemplate" style="display: none;">

集锦
  • 1234
  • abc def asdasd asdasd
  • asdasda as asdasdas
  • asdasd asdasdas asdsad asdasd asa

不要使用正则表达式刮取HTML

请参阅,了解令人信服的原因


改为使用HTML解析器——所以答案建议使用。

在本例中,因为它非常简单,所以我认为您可以使用Regex实现它。尽管您可能会遇到一个失败的例子,但它应该在所有正常情况下都能工作。我想在这种类型的代码中,这并不意味着安全风险

不工作的原因是因为在表达式的中间使用了点。默认情况下,点匹配除换行符以外的任何内容。为了测试,我改用了
[\W\W]
,这确实有效(愚蠢的黑客攻击可以真正匹配任何东西)

最简单的方法是使用
s
开关将正则表达式切换到单行模式。如何做到这一点取决于您的框架,但通常是
\\s


有关更多信息,请参阅。

仅使用DOM解析器不是更好吗?还是有理由想用正则表达式呢?我必须用正则表达式,因为我别无选择!我使用的是一个现成的脚本,它只给我一个文本框来输入Regex…如果你问我如何更改你付费的PHP脚本来完成没有Regex的任务,你会更幸运。我必须使用Regex,因为我没有选择!我正在使用一个现成的脚本,它只给了我一个文本框来输入正则表达式……谢谢Joeri Hendrickx,终于有人回答了我的问题:)BTW,我找到了另一种方法来匹配空白空间,使用“[()\t\s] *”,但是由于某些原因,捕获组似乎不起作用。我可以在Rubular中看到我匹配了正确的位,但我想捕获被“
    &”
“如果这个答案对你有帮助,请投票并接受它。如果您需要更多信息,我建议您编辑您的问题或提出另一个问题。无论如何,如果您想捕获
      之间的所有内容,则需要将它们添加到表达式中(连同所有垃圾以去除属性),然后在它们之间的代码周围放置一对paren以对其进行分组。另外,在一个paren之后添加
      ?:
      ,以避免将该paren用作捕获组。这样,您就可以到达一个点,即组1是您想要的,这可能是您的脚本所需要的。组0始终是整个匹配项。