java - 正则表达式捕获逻辑 OR 中的组

标签 java regex

我有一组字符串需要解析并从中提取值。它们看起来像:

    /apple/1212d3fe 
    /cat/23224a2f4 
    /auto/445478eefd
    /somethingelse/1234fded

它应该只匹配 apple、cat 和 auto。我期望的输出是:

1212, d3fe
23224, a2f4
445478, eefd
null

我需要想出一个正则表达式来捕获组来执行相同的操作。我能够提取第二部分,但不能提取第一部分。我想出的最接近的是:

String r2 = "^/(apple/[0-9]{4}|cat/[0-9]{5}|auto/[0-9]{6})([a-f0-9]{4})$";
System.out.println(r2);

Pattern pattern2 = Pattern.compile(r2);

Matcher matcher2 = pattern2.matcher("/apple/2323efff");
if (matcher2.find()) {
  System.out.println(matcher2.group(1));
  System.out.println(matcher2.group(2));
}
<小时/>

更新的问题:

我有一组字符串需要解析并从中提取值。它们看起来像:

    /apple/1212d3fe 
    /cat/23e24a2f4 
    /auto/df5478eefd
    /somethingelse/1234fded

它应该只匹配 apple、cat 和 auto。我期望的输出是第二个“/”分割后的所有内容,如下所示:如果“apple”则为 4 个字符,如果“cat”则为 5 个字符,如果“auto”则为 6 个字符,如下所示:

1212, d3fe
23e24, a2f4
df5478, eefd
null

我需要想出一个正则表达式来捕获组来执行相同的操作。我能够提取第二部分,但不能提取第一部分。我想出的最接近的是:

String r2 = "^/(apple/[0-9]{4}|cat/[0-9]{5}|auto/[0-9]{6})([a-f0-9]{4})$";
System.out.println(r2);

Pattern pattern2 = Pattern.compile(r2);

Matcher matcher2 = pattern2.matcher("/apple/2323efff");
if (matcher2.find()) {
  System.out.println(matcher2.group(1));
  System.out.println(matcher2.group(2));
}
<小时/>

我可以在没有正则表达式 OR(|) 的情况下做到这一点,但当我包含它时它会中断。有关正确正则表达式的任何帮助吗?

最佳答案

更新的答案:

根据您更新的问题,您可以根据后向断言使用此正则表达式:

/((?<=apple/).{4}|(?<=cat/).{5}|(?<=auto/).{6})(.+)$

RegEx Demo

  • 此正则表达式在匹配 / 后使用 2 个捕获组
  • 在第一组中,我们有 3 个交替的回顾条件。
  • (?<=apple/).{4}确保我们匹配 4 个具有 apple/ 的字符在左侧。同样,我们匹配具有 cat/ 的 5 和 6 个字符串。和/auto/ .
  • 在第二个捕获组中,我们匹配行尾之前的剩余字符。

关于java - 正则表达式捕获逻辑 OR 中的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57633035/

相关文章:

regex - 如何使用正则表达式查找哈希中的键

java - 线程输出未按预期执行

PHP (Regex) 检查字符串是否至少包含 4 位数字 + 2 个字母

regex - 查找转义字符(不包括引号和反引号)

java - 传递一个类,实例化它并使用正确的方法

regex - sed/perl 中的非贪婪正则表达式匹配

regex - 如何在 perl 中使用 split 函数来完成 awk 的工作

java - JW Player 6 的主要和后备(RTMP 和 HTML5)

java - Selenium html webdriver 无法定位元素

java - 当整个json是一个数组时解析jsonobject?