这个Java正则表达式代码在做什么?

时间:2012-10-15 17:09:00

标签: java regex

我刚在代码库中的“Utils”类中找到了这个方法。它是很久以前由不再为我们工作的开发人员编写的。它在做什么?什么回来了?!?当然,没有JavaDocs或评论。

public static String stripChars(String toChar, String ptn){
    String stripped = "";
    stripped = toChar.replaceAll(ptn, "$1");
    return stripped.trim();
}

提前致谢!

5 个答案:

答案 0 :(得分:3)

基本上这是一个非常短的别名。这样:

stripChars(a, b)

相当于:

a.replaceAll(b, "$1").trim()

答案 1 :(得分:2)

它似乎取代了“toChar”中的所有内容,它将正则表达式“ptn”与第一组匹配,以匹配“toChar”

正则表达式具有组的概念,例如匹配“2012年”并将其替换为“年1012”,或“年2006”与“年1007”(将前20个更改为10)可以通过替换来完成

“第20年([0-9] [9-9])”和“年20 $ 1” - 也就是说,匹配整个字符串,然后将其替换为“20年”,然后替换第一组({ {1}})。该组是括号中的第一个东西。

无论如何,您的方法会将“toChar”中与“ptn”匹配的所有内容替换为正则表达式“ptn”中的第一个组。所以给定 stripChars(“2012年”,“第20年([0-9] [9-9]”);您只会收到“12”,因为整个文本将匹配并仅被第一组替换。

然后它会跳过任何前导或尾随空格。

答案 2 :(得分:1)

只有replacing一个字符串,其中包含自己的subset匹配字符,然后从两端修剪空格。

Fo示例

因此,如果您希望将一个单词替换为该单词的一系列数字

使用正则表达式\b.*?(\d*).*?\b

然后繁荣,您的replaceAll方法将提供这些结果

hey123wow->123
what666->666
how888->888

$0指的是整个匹配的字符串,例如此示例中的hey123wowwhat666how888

$1指的是此示例中的group.i.e。(\d*),即。123666888

$2将引用此示例中不存在的第二组。

答案 3 :(得分:1)

作为参数方法传递的模式字符串似乎包含一个匹配的组,并且要替换all的调用将使用与第一个组匹配的部分替换整个匹配到paatern。您应该查找此方法的调用层次结构,以查找传递给方法的一些正则表达式以及正在处理的字符串,

答案 4 :(得分:0)

toChar.replaceAll(ptn, "$1");

它将ptn toChar中所有出现的$1替换为已捕获的组brackets (),我们不知道它在哪里。

捕获组是"(\\d+)(cd)"内的模式: -

对于以下正则表达式中的E.G: -

$0

  • $1表示完整匹配
  • \\d+表示第一个捕获组($2
  • cd表示第二个捕获组(String str1 = "xyz12cd"; // This will replace `12cd` with the first capture group `12` str1 = str1.replaceAll("(\\d+)(cd)", "$1"); System.out.println(str1);

    Regular Expression

要了解有关{{1}}的更多信息,请参阅以下链接: -