是的我知道,不要用正则表达式解析html。那说:
我正在尝试使用单词" Title"在第一个标签中。
我开始时:
(?P<QUALIFY_TITLE><(.*?)(title)(.*?)>)(.*?)?(?<CAPTURE>KnownTermIWant)(.*?)(\<\/.*?>)
命名组捕获是我正在寻找的已知单词/字符串。我还为了研究而捕获QUALIFY_TITLE名称组。我之所以这样做是因为我不想要字符串/术语,除非我有资格获得&#39;就这样。
但是,如果我有一个看起来像这样的html的一部分:
<div class="wwm"><div class="inbox"><input name="language-id" type="hidden" id="language-id" value="" /><input name="widget-page-handle" type="hidden" id="widget-page-handle" value="wwm4widget_post" /><input name="email-page-handle" type="hidden" id="email-page-handle" value="wwm4widget_emailpopup" /><div id="divWidget" style="display: block;" class="vhWidget"> <div id="divShareLink" style="display: block;" class="shareLink"><div id="divTitle" class="title">KnownTermIWant</title>
虽然我得到了我想要的CAPTURE String(KnownTermIWant),但Qualify字符串从第一个字符串开始#34;
我正在努力让QUALIFY_TITLE从最后一个开始/捕获&#34;&lt;&#34;在标题之前不是第一个,换句话说QUALIFY TITLE应该是:
<div id="divTitle
甚至
<div id="divTitle" class="title">
但我现在正在
<div class="wwm"><div class="inbox"><input name="language-id" type="hidden" id="language-id" value="" /><input name="widget-page-handle" type="hidden" id="widget-page-handle" value="wwm4widget_post" /><input name="email-page-handle" type="hidden" id="email-page-handle" value="wwm4widget_emailpopup" /><div id="divWidget" style="display: block;" class="vhWidget"> <div id="divShareLink" style="display: block;" class="shareLink"><div id="divTitle" class="title"
答案 0 :(得分:1)
问题是正则表达式搜索会尝试在第一个可能的机会匹配,而非贪婪量词(*?
而不是*
)不会影响某些内容是否匹配。例如,给定字符串abcd
,正则表达式.*?d
将匹配整个事物,因为.*?
仍将匹配所需的数量,以确保正则表达式匹配。< / p>
你明白我的意思吗?
所以你需要让你的子表达更加精确;例如,您应该写<(.*?)(title)(.*?)>
而不是<([^>]*)(title)([^>]*)>
。
答案 1 :(得分:1)
这里只有一个问题,你的确与你所要求的完全匹配:)
如果您只想匹配最后一个标签,请问自己这个问题:
&#34;每个前面的标签内部是什么,但不在我想要的内部?#34;
答案是打开/关闭标签本身:
(?P<QUALIFY_TITLE><([^<>]*?)(title)(.*?)>)(.*?)?(?<CAPTURE>KnownTermIWant)(.*?)(\<\/.*?>)
^^^^^
答案 2 :(得分:0)
您的代码非常混乱,但我会以更加简化的方式回答标题中的问题:
在此示例代码中:
<div>Example text<div>Foo bar</div> Hello world <div>Lorem ipsum</div></div> hi
如果您想从第一个 <div>
匹配到 last </div>
,您可以使用贪婪的量词,例如{ {1}}或+
:
*
这将匹配整个字符串,直到最后一个/<div>(.*)<\/div>/
。
如果这不能回答你的问题,那么正则表达式的复杂性会很快变得更快(对于额外的要求,它的基本指数会更加复杂),所以就像你在第一行中所说的那样,只需使用解析器。