Java 中带标点符号的模式匹配

Pattern matching in Java with punctuations

我想提供匹配 Java 中的标点符号和正则表达式字符的支持。对标点符号的支持工作正常,但即使是简单的正则表达式也会失败。

这是我的模式:

(\s\p{Punct}|^\p{Punct}|\s|^)ros?(\s|\p{Punct}|$)

我要匹配的内容:rose

find() 方法为此模式返回 false。我最初认为根本原因是模式的 {Punct} 部分,所以我尝试在我的单元测试中将我的正则表达式更改为 (\s\p{Punct}|^\p{Punct}|\s|^)ro?e(\s|\p{Punct}|$),但即使这样也失败了

您的模式不匹配,因为 "rose" 中的 'e' 不是标点符号或空白字符。

除了您模式中的 ros? 之外,只有 s 是可选的。

注意:Unix shell中的?*不是"Linux regex",而是"shell globbing"通配符。 Linux(grep、sed、awk)中的正则表达式都使用 . 作为单个替换字符。