Iwa*_*ing 21 java regex string replaceall
我需要在字符串中转义所有引号('),因此它变为\'
我尝试过使用replaceAll,但它没有做任何事情.由于某种原因,我无法使正则表达式工作.
我正在尝试
String s = "You'll be totally awesome, I'm really terrible";
String shouldBecome = "You\'ll be totally awesome, I\'m really terrible";
s = s.replaceAll("'","\\'"); // Doesn't do anything
s = s.replaceAll("\'","\\'"); // Doesn't do anything
s = s.replaceAll("\\'","\\'"); // Doesn't do anything
Run Code Online (Sandbox Code Playgroud)
我真的被困在这里,希望有人能在这里帮助我.
谢谢,
我要
Sag*_*age 31
你必须首先转义反斜杠,因为它是一个文字(屈服\\),然后因为正则表达式(屈服\\\\)再次转义它.所以,试试:
s.replaceAll("'", "\\\\'");
Run Code Online (Sandbox Code Playgroud)
输出:
You\'ll be totally awesome, I\'m really terrible
Run Code Online (Sandbox Code Playgroud)
让我们来看看String#repalceAll(String regex,String replacement)
你会看到:
调用str.replaceAll(regex,repl)形式的此方法会产生与表达式完全相同的结果
Pattern.compile(regex).matcher(str).replaceAll(repl)
让我们来看看Matcher.html#replaceAll(java.lang.String)文档
请注意,替换字符串中的反斜杠(
\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同.如上所述,美元符号可被视为对捕获的子序列的引用,反斜杠用于替换替换字符串中的文字字符.
您可以看到replacement我们有特殊字符$,可以用作对捕获组的引用
System.out.println("aHellob,aWorldb".replaceAll("a(\\w+?)b", "$1"));
// result Hello,World
Run Code Online (Sandbox Code Playgroud)
但有时候我们不想$这么特别,因为我们想把它当作简单的美元字符,所以我们需要一种方法来逃避它.
这里来了\,因为它用于在正则表达式,字符串和可能在其他地方转义元字符,所以在这里使用它来逃避是一个很好的惯例$.
所以现在\也是替换部分的元字符,所以如果你想让它\更换为简单的文字,你需要以某种方式逃避它.你猜怎么着?你以与在regex或String中转义它相同的方式逃避它.你只需要\在逃脱之前放置另一个.
因此,如果您想\在替换零件中创建,则需要\在其之前添加另一个零件.但请记住,要\在String中编写文字,您需要将其编写为"\\"如此创建两个\\替换,您需要将其编写为"\\\\".
所以试试吧
s = s.replaceAll("'", "\\\\'");
Run Code Online (Sandbox Code Playgroud)
减少替换部分(以及正则表达式部分中的显式转义 - 忘记前面提到的)只是使用replace而不是replaceAll为我们添加正则表达式转义
s = s.replace("'", "\\'");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
111128 次 |
| 最近记录: |