我有一个包含此BASE标记的网页的完整HTML文档字符串:
<BASE href="http://whatreallyhappened.com/">
在Delphi XE2中,我使用这个正则表达式作为主题来获取双引号之间的BASE标记的URL:
BaseURL := TRegEx.Match(HTMLDocStr, '(?<=<base(\s)href=").*(?=")', [roIgnoreCase]).Value;
这是有效的,但前提是BASE
和href
之间的主题中只有一个空格字符。
我尝试在正则表达式(\s)
中的空格部分添加量词,但它不起作用。
那么,即使BASE
和href
之间有多个空格,我怎样才能使此正则表达式与URL匹配?
答案 0 :(得分:2)
通过使用环视,你使这太复杂了。如果您只想提取部分正则表达式匹配,只需添加一个捕获组。然后,您可以使用捕获组匹配的文本而不是整体匹配。在大多数情况下,你也会以这种方式获得更好的表现。
要在文件中查找基本标记并提取其URL,您可以使用正则表达式<base[^>]+href=["']([^"']*)["']
。致电TRegex.Match()
以获得TMatch
。这有一个Groups
属性,如果找到匹配项,您可以使用它来检索组1。
答案 1 :(得分:0)
您可以使用不同的方式尝试使用这样的量词:
(?<=<BASE)\s+href=".*(?=")
(?<=<BASE)\s{0,30}href=".*(?=")
<强> Working demo 强>
顺便说一句,如果您只想获取href中的内容,则无需外观,您可以使用:
<BASE\s+href="(.*?)"
<强> Working demo 强>
编辑:看完你的评论后,我想出了一个解决方法(丑陋但可行)。您可以尝试使用以下内容:
((?<=<BASE\shref=")|(?<=<BASE\s\shref=")|(?<=<BASE\s\s\shref=")).*(?=")
^---notice \s ^---notice \s\s ^---notice \s\s\s
我知道这很糟糕,但如果上述工作都没有,你可以试试。