java - 如何判断子串OR匹配?

标签 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"?

}

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

最佳答案

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

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

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

编辑:为了简单起见,我假设使用 FirstSecond 作为占位符,实际上表示更复杂的表达式。如果您确实想查找两个字符串中的哪一个匹配,则使用单个捕获组(如下所示:(First|Second))并将其内容与 First 进行比较会很好地完成工作。

关于java - 如何判断子串OR匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21246606/

相关文章:

Java使用Rand访问文件从文件中获取某些字符

java - 使用 Checkstyles 防止准备好的语句泄漏

bash 中的正则表达式(下载正则表达式的输出)

java - 以编程方式用 Java 替换 JavaScript 方法

java - 在 Grails 中使用 Hibernate Annotated Java 类时的日期问题

java - 检查枚举集是否有相同的枚举值

java - 我如何避免使用 Thread.sleep()?

java - 正则表达式替换图像文件扩展名的 URL;用加号替换空格

javascript - JS 正则表达式有问题

php - 如果字符串中间包含很多空格,/\s+$/u 的表现会非常糟糕