在免费标记中检测单引号

时间:2019-01-05 21:56:02

标签: regex freemarker

我正试图编写一个能同时检测到这两个正则表达式

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)

它似乎没有检测到单引号。 我在这里想念什么吗? 预先感谢!

1 个答案:

答案 0 :(得分:0)

代替使用原始字符串文字,您可以仅使用字符串,转义单引号并将正则表达式更新为href=([\'"])https?.+?\\1,这将利用捕获组。

您的代码如下:

<#assign res = htmlBody?matches('href=([\'"])https?.+?\\1')>

正则表达式详细信息:

  • href=字面上匹配
  • ([\'"])正在捕获与'"匹配的组1
  • https?将http与可选s匹配
  • .*?匹配任何不贪心的字符
  • \\1向后引用第1组中捕获的内容