从通配符构建Java正则表达式

时间:2015-05-11 09:31:01

标签: java regex

我需要将包含文本和通配符(星号,“*”)的字符串翻译成包含文本和正则表达式的字符串。

例如字符串:

  

http://myapp.example.com/fizz/buzz/myapp-1.5 *。罐

将转换为:

  

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);或
  • 期间(“。”)
  • 连字符(“ - ”)

1 个答案:

答案 0 :(得分:2)

方法replaceAll()的第一个参数是模式。由于*在模式中具有特殊含义,因此您必须使用\来转义它。但更简单的方法就是使用replace()方法。

EDIT。

BTW我通常使用str.replace("*", ".*")代替枚举所有可能的字符。