当前位置: 首页 > 面试题库 >

Java组数可变的正则表达式?

杜骏祥
2023-03-14
问题内容

是否可以创建具有可变数量的组的正则表达式?

例如运行此之后…

Pattern p = Pattern.compile("ab([cd])*ef");
Matcher m = p.matcher("abcddcef");
m.matches();

…我想要一些类似的东西

  • m.group(1) = “c”
  • m.group(2) = “d”
  • m.group(3) = “d”
  • m.group(4)= “c”。

(背景:我正在解析一些数据行,“字段”之一正在重复。我想避免matcher.find这些字段的循环。)


问题答案:

根据文档,Java正则表达式不能做到这一点:

与组关联的捕获输入始终是该组最近匹配的子序列。如果由于量化而对组进行第二次评估,则如果第二次评估失败,则将保留先前捕获的值(如果有)。例如,将字符串“ aba”与表达式(a(b)?)+匹配,则将第二组设置为“ b”。在每次比赛开始时,所有捕获的输入都会被丢弃。



 类似资料:
  • 我使用这个正则表达式: 要匹配这样的字符串: 分为4组: 问:我如何使第一个组可选,使结果组是一个空字符串? 我想在每种情况下得到4组,如果可能的话。 这种情况下的输入字符串:(第一组后面没有下划线)

  • 本文向大家介绍计算Java正则表达式的组数,包括了计算Java正则表达式的组数的使用技巧和注意事项,需要的朋友参考一下 通过将多个字符捕获为一组,可以将多个字符视为一个单元。您只需要将这些字符放在一组括号内即可。 您可以使用Matcher类的groupCount()方法计算当前匹配项中的组数。此方法计算当前匹配项中的捕获组数并返回。 示例 输出结果

  • 问题内容: 我正在尝试使用Java expr在:之后捕获正确的部分,但是在以下代码中,打印的捕获组是整个字符串,怎么了? 问题答案: 子组的编号从1开始,全文为0。只需循环执行count + 1。

  • 问题内容: 如何在Java Regex中定义重复组? 假设一个2位数[0-9] {2}多次用分隔, 这是可能的还是唯一的机会? 编辑:我想验证并提取。 问题答案: 最简单的方法是使用两步解决方案:1)首先,验证字符串,然后2)用您选择的定界符分割字符串: 在此,匹配以两位数字开头的整个字符串,然后匹配出现的0个或多个和结尾的两位数字,然后用逗号分割该字符串。注意你不需要和美女主播与图案内,因为该方

  • 我有3个正则表达式,但当模式匹配时执行相同的操作,所以我考虑将所有三个表达式合并为一个。我尝试了很多,但无法让“|”I.e”或“在我的正则表达式中工作 regex1:<代码>文本。替换(/([\u00A9-\u3299])/g,函数myFunction(x){…} regex2: regex3: 我试过这样做,但它不起作用regex:

  • 问题内容: 在Java中,我试图将所有正则表达式匹配项返回到数组,但是似乎您只能检查模式是否匹配某些内容(布尔值)。 如何使用正则表达式匹配在给定字符串中形成所有与正则表达式匹配的字符串数组? 问题答案: (如果你可以假设,则4castle的答案比下面的要好) 你需要创建一个匹配器,并使用它来迭代查找匹配项。 之后,包含匹配项,如果你确实需要一个数组,则可以使用它来获取一个数组。 返回了当前组状态