1

我对在 java 中使用正则表达式相当陌生。我的动机是用反斜杠转义所有出现的“*”。这是我尝试过的声明:

String replacementStr= str.replaceAll("(?=\\[*])", "\\\\");

这似乎不起作用。经过一些修补后,发现这是可行的。

String replacementStr= str.replaceAll("(?=[]\\[*])", "\\\\");

根据我对正则表达式的了解,我认为 '[]' 代表一个空字符类。我在这里错过了什么吗?有人可以帮我理解吗?

注意:我试用的目的是学习使用正则表达式的前瞻功能。虽然问题中所述的目的不保证使用前瞻,但我只是试图将其用于教育目的。抱歉没有说清楚!

4

4 回答 4

0

当某些元字符放在括号内时,无需转义。

换句话说,我不知道你的意思是不是 *\*. 在这种情况下,请尝试下一个:

String newStr = str.replace("*", "\\*");

编辑:您的正则表达式中有一些奇怪的东西。

  • (?=\[*])向前查找字符[(0 次或多次),然后是]

正则表达式可视化

  • (?=[]\[*])向前看下一个字符之一:[, ],*

正则表达式可视化

也许您正在寻找的正则表达式如下:

(?=\*)

在 Java 中,"(?=\\*)"

于 2013-08-31T06:36:14.120 回答
0

在您replaceAll("(?=\\[*])", "\\\\");简单地修改为

String newStr = str.replace("*", "\\");

不要为正则表达式烦恼

例如

String str = "abc*123*";
String newStr = str.replace("*", "\\");
System.out.println(newStr);

显示输出为

abc\123\

了解字符串替换

于 2013-08-31T06:38:09.713 回答
0

下面的代码将起作用

代码

String strTest = "jhgfg*gfb*gfhh";
strTest = strTest.replaceAll("\\*", "\\\\"); //   strTest = strTest.replace("*", "\\");
System.out.println("String is : "+strTest);

输出

String is : jhgfg\gfb\gfhh
于 2013-08-31T07:02:38.270 回答
0

如果正则表达式引擎找到[],它会将]视为文字]。这从来都不是问题,因为空字符类无论如何都没用,这意味着您可以避免一些字符转义。

对于您不必在字符类中转义的字符有一些规则:

  • [](或[^])中,]是字面量
  • [-.....]or[^-.....][.....-]or[^.....-]中,the-是字面的
  • ^是字面量,除非它位于字符类的开头

所以你永远不需要逃跑]-或者^如果你不想。

这取决于正则表达式语法的 Perl 起源。这是一种非常 Perl 风格的做事方式。

于 2013-08-31T09:22:48.713 回答