我需要将包含文本和通配符(星号,“*”)的字符串翻译成包含文本和正则表达式的字符串。
例如字符串:
将转换为:
http://myapp.example.com/fizz/buzz/myapp-1.5.[0-9a-zA-Z.-]+.jar
[0-9a-zA-Z.-]+
是正则表达式替换它(正则表达式匹配1+位,字母表字符,句点或短划线)。
这是我的代码:
// inputStr is same as first example above (containing asterisks)
// strWithRegex is same as 2nd example above
String strWithRegex = inputStr.replaceAll("*", "[0-9a-zA-Z.-]+")
当我跑步时,我得到:
Caught: java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
*
^
java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
*
^
at java_lang_String$replaceAll$2.call(Unknown Source)
...rest of stack trace omitted for brevity
我哪里出错?此外,不是100%肯定我的正则表达式是正确的,它需要匹配1 +:
答案 0 :(得分:2)
方法replaceAll()
的第一个参数是模式。由于*
在模式中具有特殊含义,因此您必须使用\
来转义它。但更简单的方法就是使用replace()
方法。
EDIT。
BTW我通常使用str.replace("*", ".*")
代替枚举所有可能的字符。