我正在编写一个简单的调试程序,它将简单的字符串作为输入,这些字符串可以包含星号以指示通配符匹配
*.wav // matches <anything>.wav
(*, a) // matches (<anything>, a)
我想我会简单地采用该模式,转义其中的任何正则表达式特殊字符,然后将任何 \\*
替换回 .*
。然后使用正则表达式匹配器。
但是我找不到任何 Java 函数来转义正则表达式。我能找到的最佳匹配是 Pattern.quote
,但是它只是将 \Q
和 \E
放在字符串的开头和结尾。
Java 中是否有任何东西可以让您简单地进行通配符匹配,而无需从头开始实现算法?
原文由 Johannes Schaub - litb 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用简单的正则表达式
这种方法的好处之一是我们可以轻松地添加除了
*
之外的标记(请参阅底部的 添加标记)。搜索:
[^*]+|(\*)
|
的左侧匹配任何不是星号的字符\Q
+ Match +E
.*
这是一些工作代码(请参阅 在线演示 的输出)。
输入:
audio*2012*.wav
输出:
\Qaudio\E.*\Q2012\E.*\Q.wav\E
添加代币
假设我们还想通过点转换通配符
?
,它代表一个字符。我们只是向正则表达式添加一个捕获组,并将其从左侧的 matchall 中排除:搜索:
[^*?]+|(\*)|(\?)
在替换函数中,我们添加如下内容: