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