Java替换字符串开头和结尾的所有$符号

时间:2018-07-28 05:03:21

标签: java regex

如果我有一个像$$$ $$$some $ value $$ $$$$这样的字符串,我需要一个正则表达式,该正则表达式必须与字符串的开头和结尾的所有$符号匹配,因此替换后,它应该是some $ value

我正在尝试此正则表达式,但我认为我做错了,因为它返回了一些奇怪的值:

System.out.println( "Before = " + value );
value = value.replaceAll( "((^$)+|($)+$)", "" );
System.out.println( "After = " + value );

输出为:

Before = $$$ $$$some $ value $$ $$$$
After = $$$

有人可以帮助我吗?谢谢!

3 个答案:

答案 0 :(得分:2)

$PCRE metacharacter,因此您需要对其进行转义以按字面匹配:\$

但是,您似乎在寻找以下正则表达式:((^[\$\s]+)|([\$\s]+$))。 此正则表达式在字符串的开头和结尾匹配每个文字$和空格。

您可以在regex101.com

上对其进行测试

答案 1 :(得分:0)

您必须转义$(对于每个Pattern JavaDoc,这是行尾边界匹配器)。当我改变

value = value.replaceAll( "((^$)+|($)+$)", "" );

类似(由于必须在Java String中进行转义)

value = value.replaceAll("((^\\$)+|(\\$)+\\$)", "");

我得到了(按要求)

Before = $$$ $$$some $ value $$ $$$$
After =  some $ value  

答案 2 :(得分:0)

$anchor,如果要将其匹配为美元符号或在character class中使用,应将其\$转义。

如果要替换匹配项并且不使用捕获组,则可以省略组()并从字符串^的开头匹配一次或多次空白字符或美元。符号^[$\s]|与空格字符或美元符号匹配,直到字符串[$\s]+$的末尾。

^[$\s]+|[$\s]+$

value = value.replaceAll("^[$\\s]+|[$\\s]+$", "");

Demo