如何确定子串OR匹配?

时间:2014-01-20 23:58:17

标签: java regex

我有一个带有|的正则表达式(或)在其中,我想确定正则表达式中匹配或匹配的部分:

可能的输入:

- 输入1 -

Stuff here to keep.

-- First --
all of this below
gets
deleted

- 输入2 -

Stuff here to keep.

-- Second --
all of this below
gets
deleted

正则表达式匹配传入输入源的一部分并确定|的哪个部分(或)匹配? “ - 第一 - ”或“ - 第二 - ”

 Pattern PATTERN = Pattern.compile("^(.*?)-+ *(?:First|Second) *-+", Pattern.DOTALL);
 Matcher m = PATTERN.matcher(text);
  if (m.find()) {
  // How can I tell if the regex matched "First" or "Second"?

}

如何判断哪个输入匹配(第一个或第二个)?

2 个答案:

答案 0 :(得分:2)

正则表达式不包含该信息。但是,您可以使用其他一些组来解决它。

示例模式:(?:(First)|(Second))

在字符串First上,第二个捕获组将为空,而Second第一个捕获组将为空。对返回到Java的组的简单检查将告诉您正则表达式的哪一部分匹配。

编辑:为了简单起见,我假设FirstSecond被用作占位符,实际上代表了更复杂的表达式。如果你真的想找到两个字符串中的哪一个匹配,那么拥有一个捕获组(如:(First|Second))并将其内容与First进行比较就可以完成这项工作。

答案 1 :(得分:1)

因为RegExes 无状态,所以只能使用一个正则表达式无法判断。 解决方案是使用两个不同的RegExes并做出案例决定。

但是,您可以使用group()将最后一场比赛作为String返回。 您可以针对.contains("First")进行测试。

if(m.group().contains("First")) {
   // case 1
} else { 
   // case 2
}