正则表达式没有得到字符

时间:2017-02-24 07:19:51

标签: regex

我有这个正则表达式

\.*?\{\{([\w\s]+)\|([\w\s]+)\}\}

并且它正确地捕获了这个词:

{{58afc8ed3688d3001cb8b043_1487915885599|data}}

但如果我说出这样的话

{{58afc8ed3688d3001cb8b043_1487915885599|data?}}

它无法捕获它。

我怎么能抓住后来的?

1 个答案:

答案 0 :(得分:2)

你的两个例子之间的唯一区别是你有一个额外的'?'第二组(或之后)中的角色。

siam的回答是正确的,但会导致非常广泛的匹配,这可能不是您想要的。毕竟,在极端情况下,如果您愿意,可以用\{\{(.*)\|(.*)\}\}替换整个正则表达式。

假设它只是一个你关注的问号,你可以:

  • 将其添加到您组中任意位置的可接受字符 将([\w\s]+)延伸至([\w\s?]+)
  • 将其明确添加到结尾处 您的小组,将([\w\s]+)替换为([\w\s]+\?*)(将会{。}} 允许零个或任意数量的尾随问号)
  • 之后添加 小组如果您不关心使用([\w\s]+)\?*
  • 捕获它

当然,如果你的意思是接受除了问号之外的特殊字符,你可以简单地以相同的方式添加它们。