我有一个带有|的正则表达式(或)在其中,我想确定正则表达式中匹配或匹配的部分:
可能的输入:
- 输入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"?
}
如何判断哪个输入匹配(第一个或第二个)?
答案 0 :(得分:2)
正则表达式不包含该信息。但是,您可以使用其他一些组来解决它。
示例模式:(?:(First)|(Second))
在字符串First
上,第二个捕获组将为空,而Second
第一个捕获组将为空。对返回到Java的组的简单检查将告诉您正则表达式的哪一部分匹配。
编辑:为了简单起见,我假设First
和Second
被用作占位符,实际上代表了更复杂的表达式。如果你真的想找到两个字符串中的哪一个匹配,那么拥有一个捕获组(如:(First|Second)
)并将其内容与First
进行比较就可以完成这项工作。
答案 1 :(得分:1)
因为RegExes 无状态,所以只能使用一个正则表达式无法判断。 解决方案是使用两个不同的RegExes并做出案例决定。
但是,您可以使用group()
将最后一场比赛作为String
返回。
您可以针对.contains("First")
进行测试。
if(m.group().contains("First")) {
// case 1
} else {
// case 2
}