我需要将包含文本和通配符(星号、“*”)的字符串翻译为包含文本和正则表达式的字符串。
例如字符串:
将转换为:
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-9);或
- 大写/小写罗马字母字符(a-z、A-Z);或
- 句点(“.”)
- 连字符(“-”)
最佳答案
方法replaceAll()
的第一个参数是模式。由于 *
在模式中具有特殊含义,因此您必须使用 \
对其进行转义。但更简单的方法是使用 replace()
方法代替。
编辑。
顺便说一句,我通常使用 str.replace("*", ".*")
而不是枚举所有可能的字符。
关于从通配符构建 Java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30164074/