我正试图编写一个能同时检测到这两个正则表达式
href="http(s)://somelink"
和href='http(s)://somelink'
。
我现在正在使用以下正则表达式:
<#assign res = htmlBody?matches(r'href="http(s?)(.+?)"')>
可以完美地检测出第一种情况。 使用正则表达式101,我发现使用此正则表达式:
href=('|")http(s?)(.+?)('|")
在两种情况下都能正常工作。 但是,使用
<#assign res = htmlBody?matches(r'href=(\'|")http(s?)(.+?)(\'|")')>
或 <#assign res = htmlBody?matches(r'href =('|“)http(s?)(。+?)('|”)')> 或者
<#assign res = htmlBody?matches(r'href=(\\'|")http(s?)(.+?)(\\'|")')>
导致相同的错误:呈现模板错误: core.templating.TemplateMergeException在 null,null:异常解析模板。嵌套异常为 freemarker.core.ParseException:模板“ HTML”中的语法错误 第19行,第33列:找到的字符串文字:r'href =(\'。期望: 布尔值(true / false)
它似乎没有检测到单引号。 我在这里想念什么吗? 预先感谢!
答案 0 :(得分:0)
代替使用原始字符串文字,您可以仅使用字符串,转义单引号并将正则表达式更新为href=([\'"])https?.+?\\1
,这将利用捕获组。
您的代码如下:
<#assign res = htmlBody?matches('href=([\'"])https?.+?\\1')>
正则表达式详细信息:
href=
字面上匹配([\'"])
正在捕获与'
或"
匹配的组1 https?
将http与可选s匹配.*?
匹配任何不贪心的字符\\1
向后引用第1组中捕获的内容