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

Java中带有。*的正则表达式分组和replaceAll会重复替换

戚阳曜
2023-03-14
问题内容

我在Java中使用Rexexp时遇到问题。示例代码写出了ABC_012_suffix_suffix,我期望它能输出ABC_012_suffix

    Pattern rexexp  = Pattern.compile("(.*)");
    Matcher matcher = rexexp.matcher("ABC_012");
    String  result  = matcher.replaceAll("$1_suffix");

    System.out.println(result);

我知道replaceAll会替换所有匹配的组,问题是为什么此regexp组在Java中的(.*)字符串上匹配两次ABC_012


问题答案:

可能.*会给您“完全匹配”,然后将匹配减少为“空匹配”(但仍然是匹配)。尝试(.+)(^.*$)代替。两者都按预期工作。

在regexinfo中,星的定义如下:

*(星号)-将上一个项目重复零次或多次。贪婪,因此在尝试进行与前一个项目的匹配较少的置换之前,将匹配尽可能多的项目,直到前一个项目根本不匹配。



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

  • 本文向大家介绍Java正则表达式的替换和分组功能,包括了Java正则表达式的替换和分组功能的使用技巧和注意事项,需要的朋友参考一下 前言 这篇来学习正则表达式的替换和分组功能,替换很好理解,分组有点复杂,特别是如何写有效的分组的正则表达式。这篇通过几个练习,简单了解下替换和分组功能。 1.替换功能 在String类有一个替换功能的方法,结合正则表达式去实现替换,下面是replaceAll()方法的

  • 问题内容: 我对多行字符串的replaceAll有问题: 以上适用于testWorks,但不适用于testIllegal !?为什么会这样,我该如何克服呢?我需要替换跨越多行的注释/ * … * /。 问题答案: 您需要使用标志来表示点应与换行符匹配。例如 或者使用例如在模式中指定标志

  • 我正在尝试使用扩展正则表达式(例如使用 )匹配 和 之间的内容。 考虑两个示例字符串和,我尝试了以下正则表达式 但它匹配两个示例的整个字符串(贪婪)。 谁能解释一下正则表达式引擎在这种情况下是如何工作的,以及我应该如何更改我的正则表达式以使其正常工作。

  • 问题内容: 我正在使用Java的正则表达式库。我想针对以下格式验证字符串: 数字的数量未知。我想确保该字符串中至少有一个数字,并且每两个数字之间用逗号分隔。我也想从字符串中获取数字。 ( 注意: 这只是一个简化的示例,string.split无法解决我的实际问题) 我写了以下正则表达式: 验证部分起作用。但是,当我尝试提取数字时,我得到了2组: regex101版本:https://regex10