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)中的正则表达式都使用 .
作为单个替换字符。
我想提供匹配 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)中的正则表达式都使用 .
作为单个替换字符。