如果我有一个像$$$ $$$some $ value $$ $$$$
这样的字符串,我需要一个正则表达式,该正则表达式必须与字符串的开头和结尾的所有$
符号匹配,因此替换后,它应该是some $ value
我正在尝试此正则表达式,但我认为我做错了,因为它返回了一些奇怪的值:
System.out.println( "Before = " + value );
value = value.replaceAll( "((^$)+|($)+$)", "" );
System.out.println( "After = " + value );
输出为:
Before = $$$ $$$some $ value $$ $$$$
After = $$$
有人可以帮助我吗?谢谢!
答案 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]+$
的末尾。
value = value.replaceAll("^[$\\s]+|[$\\s]+$", "");