为什么第二个参数不被视为正则表达式?

时间:2012-06-13 10:18:33

标签: java regex string

我遇到了一个关于java正则表达式的有趣问题 Is there a regular expression way to replace a set of characters with another set (like shell tr command)? 所以我尝试了以下内容:

                String a = "abc";
                a = a.replaceAll("[a-z]", "[A-Z]");

现在如果我得到打印输出

                [A-Z][A-Z][A-Z]

这里我认为编译器将第一个参数作为gegex,而不是第二个参数。

这个代码还有什么问题或其他原因???

7 个答案:

答案 0 :(得分:4)

这是replaceAll的工作方式。

请参阅API

public String replaceAll(String regex, String replacement)

将此字符串中与给定正则表达式匹配的每个子字符串替换为给定的替换。

答案 1 :(得分:2)

相关问题的答案是非常明确的“否”,所以这应该不足为奇。

documentation可以看出,第二个参数确实是一个用作替换的常规字符串:

  

<强>参数:

     
      
  • regex - 与此字符串匹配的正则表达式
  •   
  • replacement - 要替换​​每场比赛的字符串
  •   

答案 2 :(得分:1)

第二个参数是简单的字符串,它将根据API

替换

答案 3 :(得分:0)

如果要将小写翻转为大写,则String类中有一个toUpperCase函数。对于tr实用程序的等效功能,我认为Java中没有支持(直到Java 7)。

替换字符串通常是字面上的,除了序列$n,其中n表示正则表达式中捕获组的编号。这将使用匹配中捕获的字符串作为替换。

答案 4 :(得分:0)

我认为正则表达式是表达条件的一种方式(即给定的字符串匹配此表达式)。考虑到这一点,你所要求的意思是“请将我的字符串中的匹配替换为......另一种情况”,这并没有多大意义。

现在,通过尝试了解您正在寻找的内容,我想要找到一些字符类之间的自动映射(例如[a-z] - &gt; [A-Z])。据我所知,这不存在,你必须自己写(除了前面的toUpperCase())

答案 5 :(得分:0)

 public String replaceAll(String regex, String replacement)

如果substring与将被第二个参数替换的模式匹配,则第一个参数是正则表达式,如果要将小写转换为大写使用

 toUpperCase() 

方法

答案 6 :(得分:0)

你应该研究jtr。用法示例:

String hello = "abccdefgdhcij";
CharacterReplacer characterReplacer;

try {
    characterReplacer = new CharacterReplacer("a-j", "Helo, Wrd!");
    hello = characterReplacer.doReplacement(hello);
} catch(CharacterParseException e) {
}

System.out.println(hello);

输出:

Hello, World!