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

标签 java regex

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

例如字符串:

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

将转换为:

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/

相关文章:

java - 如何使用 Spring boot 创建事件源服务器?

java - Play 1.2.4 : Rendering XML in template

regex - sed 正则表达式无法按预期工作。管道和文件不同

python - 使用正则表达式提取某些短语,但排除后跟单词 "of"的短语

regex - 仅匹配可能重复也可能不重复的数字和点 (.)

php - 从特定标签中剥离字符串的最快方法是什么

java - 如果我使用 VO 和 DAO,如何在 JTable 中实现数据库搜索?

JavaFX:定义自定义控件

java - 交易问题 : No Hibernate Session bound to thread

html - 自动化 CSS 图像内联的工具