正则表达式匹配事件ID(少贪心)

时间:2017-01-23 16:15:25

标签: java regex

我写了一个基本的正则表达式来匹配任何具体的事件ID' 4727 | 4731 | 4759 | 4744 | 4749

我遇到的问题是它匹配的是非标准事件中超过4个字符的模式。

事件ID = 21的 4749 8949

编写正则表达式的最佳方法是什么,以便它只匹配5个特定事件而忽略其他任何事件?

3 个答案:

答案 0 :(得分:4)

有一些方法可以解决这个问题。

如果EventID =经常出现,就像这样:

  • 的EventID = 2147498949
  • 的EventID = 4731

你总能找到这样的东西:

EventID=(4727|4731|4759|4744|4749)$
  • $字符串的结尾

但是,除此之外,你可以选择这样的东西:

\b(4727|4731|4759|4744|4749)\b
  • \b是一个单词边界

Here's an example

可以说在您要查找的4位数字符串之前和之后应该有一个单词边界。

答案 1 :(得分:0)

添加@ TaoStyle的回答

=(4727|4731|4759|4744|4749)$

只有在添加多行标记时才会起作用:

/=(4727|4731|4759|4744|4749)$/m

建议:如果您希望以后有4位数字的更多ID,为什么不使用/=\d{4}/m

答案 2 :(得分:0)

您正在寻找单词边界(\b)。看看:

    Pattern pattern = Pattern.compile("\\b(4727|4731|4759|4744|4749)\\b");
    for (String in : new String[]{"EventID=2147498949", "EventID=4727"}) {
        System.out.println(pattern.matcher(in).find());
    }

此外,如果您的模式始终从EventID=开始,则最好将其包含在模式中并使用group capturing