使用可选组

时间:2017-01-17 11:50:10

标签: javascript regex vba vbscript non-greedy

我想在(this is)?.??.??(an)?.??.??(example sentence)正则表达式中的每个组之间允许任何0到2个字符。它应该匹配以下字符串中的粗体文本:

  等等等等等等。一个例句
  等等等等。 这是一个例句
  某事例句

现在,在第一个示例中,匹配为ah. example sentence。我想在#34;中添加2个问号。"意味着正则表达式引擎更愿意匹配0个字符。

我在MS Word中使用VBA中的正则表达式,由CreateObject("vbscript.regexp")实现,据我所知它使用VBScript正则表达式,据我所知它与JavaScript的味道相同。

1 个答案:

答案 0 :(得分:3)

  

搜索0020002101应该2.??.??.??101不是2101还是20002101

正则表达不能"更喜欢"任何东西。它从左到右匹配。找到2后(第一个2),它会开始匹配后续的子模式,当找到匹配项时,会返回它。

在您的情况下,您需要使用可选组内的.{0,2}

(this is.{0,2})?(an.{0,2})?(example sentence)
        ^^^^^^     ^^^^^^

请参阅regex demo

如果可选字符串的顺序很重要,请将它们嵌套:

(this is.{0,2}(an.{0,2})?)?(example sentence)

another regex demo。只有在an之前找到0到2个字符的this is时,此正则表达式才会将public class ImageColor { public void Imager(MainActivity activity) { activity.ColorChange(); } } 与0到2个字符匹配。