我刚刚在我们的代码库中的"Utils"类型类中找到了此方法。它是很久以前由不再为我们工作的开发人员编写的。它在做什么?它返回的是什么?!?当然,没有JavaDocs或注释。
public static String stripChars(String toChar, String ptn){
String stripped = "";
stripped = toChar.replaceAll(ptn, "$1");
return stripped.trim();
}
提前感谢!
本质上,这是一个非常短的别名。这:
stripChars(a, b)
相当于:
a.replaceAll(b, "$1").trim()
它似乎将"toChar"中与正则表达式"ptn"匹配的所有内容替换为"toChar"中匹配的第一组
正则表达式具有组的概念,例如匹配"2012 年"并将其替换为"1012 年",或将"2006 年"替换为"1007 年"(将前 20 更改为 10)可以通过替换来完成
"year 20([0-9][9-9])"与"year 20$1"——也就是说,匹配整个字符串,然后将其替换为"year 20",后跟第一组($1
)。 组是括号中的第一件事。
无论如何,您的方法会将与"toChar"中的"ptn"匹配的所有内容替换为正则表达式"ptn"中的第一组。 所以给定条字符("2012年","20年([0-9][9-9]"); 您只会收到"12",因为整个文本将匹配并仅由第一组替换。
然后,它会触发任何前导或尾随空格。
作为参数方法传递的模式字符串似乎包含一个匹配的组,并且替换所有调用将用与第一个组匹配的部分替换与 paatern 的整个匹配项。您应该查找此方法的调用层次结构,以查找传递给该方法的一些正则表达式以及正在处理的字符串,
只是replacing
一个字符串,其中包含自己的匹配字符subset
,然后从两端修剪空格。
佛的例子
因此,如果您希望将一个单词替换为该单词的一系列数字
使用正则表达式b.*?(d*).*?b
然后繁荣,你的replaceAll
方法会给出这些结果
hey123wow->123
what666->666
how888->888
$0
是指整个匹配的字符串,即hey123wow
、what666
、how888
$1
指的是组,即(d*)
在这个例子中,即123
、666
、888
$2
将引用此示例中不存在的第二组。
toChar.replaceAll(ptn, "$1");
它用捕获的组替换了toChar
中ptn
的所有发生$1
我们不知道它在哪里。
捕获组是brackets ()
内的模式:-
例如,在下面的正则表达式中:-
"(\d+)(cd)"
-
$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
的更多信息,您可以参考以下链接:-
- http://www.vogella.com/articles/JavaRegularExpressions/article.html
- http://docs.oracle.com/javase/tutorial/essential/regex/