我正在寻找匹配所有HTML标记的正则表达式,但<p>
和</p>
除外,其中包含标记内容。我正在开发ColdFusion。
除了<p>
和</p>
之外,还有earlier post个匹配标记,但我还需要抓取标记之间的所有内容。例如,以下内容应完全匹配:
<a href="http://www.google.com">Google</a>
和
<em>Some text here</em>
但不是
<p>Some text and tags here</p>
关于如何实现这一目标的任何想法?
答案 0 :(得分:6)
使用正则表达式解析HTML非常困难和痛苦。
最好使用某种基于DOM的解析器并找到所需的元素。
答案 1 :(得分:1)
有时将正则表达式与一些额外的检查结合起来会更容易。
所以\<.*?\>.*?\<\/.*?\>
应匹配<..>...</..>
之类的标签之间的任何内容。然后,您可以通过编程方式检查<..>
和</...>
分别不是<p>
和</p>
。如果你将它们分组ala,那么检查这个可能是最简单的:
(\<.*?\>).*?(\<\/.*?\>)
然后检查以确保$1
和$2
(或者您在环境中进行反向引用)不是段落打开和关闭标记。
.*?
指定最小匹配;我假设你的正则表达式环境支持它。
答案 2 :(得分:0)
你还没有说过你要做什么,但是使用XmlParse
函数创建一个XML DOM,然后对此进行处理,你会有一个很好的改变。
答案 3 :(得分:0)
这有用吗?我只做了一些检查,但似乎:
Regex expr = new Regex(@"<([A-OQ-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>", RegexOptions.IgnoreCase);
我刚复制过&amp;粘贴了C#代码。要获取标记之间的所有内容,您需要使用\ 1,然后您需要关闭区分大小写,因此IgnoreCase或-i或您正在使用的任何工具都提供该选项。如果你的工具不这样做,那么你将不得不做A-Oa-oq-zQ-z等。只是正则表达式:
<([A-OQ-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>
请注意,这会记录匹配独立标记,但应该让您入门。