2012-10-15 45 views
1

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

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

在此先感谢!

+1

没有足够的信息来说出有用的东西。 'ptn'是一个模式,一个正则表达式,并且该字符串中的匹配被'$ 1'代替。 – pb2q

+1

你需要知道什么,在java文档replaceAll&trim中没有解释什么? – ilcavero

+0

确定功能的最佳方式是查看它的使用方式。 – Eric

回答

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”,因为整个文本将匹配并且仅由第一组所取代。

然后它跳过任何前导或尾随的空白。

+0

谢谢@Ben(+1) - 所以如果我通过它'字符串s = RegexUtils.stripChars(“年2012”,“20年([0-9] [9-9])”);',那么会怎么样是吗?再次感谢! – IAmYourFaja

+1

似乎s会是“12”,因为它会匹配整个字符串,并将其全部替换为第一组(即12) – Ben

+0

再次感谢@Ben,这很有道理(+1)!我要重命名/重构此方法。你愿意给它一个新的(更好,更精确)的名字吗?我们很荣幸:-) – IAmYourFaja

1

这只是replacing与其匹配的字符的自己subset,然后微调从两端的空格的字符串。

佛例如

所以,如果你想通过一系列的字

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

,然后热潮的数字来代替一个字,你replaceAll方法会给这些结果

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

$0指吨他整个在这个例子中

$1指group.i.e匹配的字符串即hey123wowwhat666how888(\d*)在该示例中即123666888

$2将提及它不在这个例子中存在的第二组。

3

这是一个非常简短的别名,实际上。这:

stripChars(a, b) 

等同于:

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

谢谢@Eric(+1) - 我被“$ 1”抛弃 - 这意味着什么?你能提供一个如何使用它的例子吗?再次感谢! – IAmYourFaja

1

被作为参数传递到方法的模式字符串似乎包含一个匹配组和呼叫全部更换将要更换整个比赛进行到与第一组相匹配的部分。你应该看看这种方法找到一些正则表达式传递到与正在根据工作的弦沿方法的调用层次,

+0

谢谢@Vikdor(+1) - 请在Eric的回答下看到我的问题 - 我对你有同样的问题! – IAmYourFaja

+0

您可以使用此语法对您的正则表达式的部分进行分组,以引用与此部分匹配的内容。下面的Rohit的答案有详细解释的链接。 – Vikdor

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

它与拍摄组$1我们不知道它是更换的ptn所有OCCURENCES在toChar

捕获基团是内部brackets()型态: -

对于EG在正则表达式如下: -

"(\\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,你可以参考以下链接: -