包含负向前瞻的正则表达式匹配整个字符串

时间:2017-12-30 10:23:52

标签: ruby regex

我有这样的文字:

Name: <% $person %> <& component &>

我正在努力想出一个Ruby正则表达式,它会给我看起来像<% .. %><& ... &>的所有内容。

这是我使用否定前瞻的方法:

(?!<&|<%)(.+\s*)(?!&>|%>)

但是当我希望它返回Name:时,它会返回整个字符串(已测试here)。

2 个答案:

答案 0 :(得分:2)

也许您可以选择使用空字符串替换字符串中<% .. %><& ... &>之间的所有内容:

(?:<%[^%]+%>|<&[^&]+&>)

Demo

答案 1 :(得分:1)

试试这个正则表达式:

  • (?<=^|[&%]>) - 正向观察:文本或文本的开头 “结束”标记(&>%>)。
  • (.+?) - 这是您要捕获的内容。请注意?之后的+不情愿版本,防止“消耗”其余部分 文本。
  • (?=<[&%]|$) - 积极前瞻:要么“开放” 标记(<&<%)或文字结尾。

总结一下:

(?<=^|[&%]>)(.+?)(?=<[&%]|$)