带标点的Java模式匹配
我想提供在Java中匹配标点符号和正则表达式字符的支持。对标点符号的支持工作得很好,但即使是简单的正则表达式也不行 这是我的模式:带标点的Java模式匹配,java,regex,Java,Regex,我想提供在Java中匹配标点符号和正则表达式字符的支持。对标点符号的支持工作得很好,但即使是简单的正则表达式也不行 这是我的模式: (\s\p{Punct}|^\p{Punct}|\s|^)ros?(\s|\p{Punct}|$) 和我试图匹配的内容:rose 对于此模式,find()方法返回false。我最初认为根本原因是模式的{Punct}部分,所以我尝试在单元测试中将我的正则表达式改为(\s\p{Punct}124^\ p{Punct}124;\ s}ro?e(\s | \p{Punct
(\s\p{Punct}|^\p{Punct}|\s|^)ros?(\s|\p{Punct}|$)
和我试图匹配的内容:rose
对于此模式,find()方法返回false。我最初认为根本原因是模式的
{Punct}
部分,所以我尝试在单元测试中将我的正则表达式改为(\s\p{Punct}124^\ p{Punct}124;\ s}ro?e(\s | \p{Punct}$)
,但即使这样也失败了,因为“rose”中的'e'
不是标点符号或空白字符,所以模式不匹配
除了ros?
之外,您的模式中只有s
是可选的
注意:Unix shell中的
?
和*
不是“Linux正则表达式”,而是“shell全局”通配符。Linux中的正则表达式(grep、sed、awk)都使用
作为单个替换字符。我没有看到任何与e
匹配的内容。我想你可能对?
感到困惑。这意味着匹配上一个字符的0或1次出现,因此ros?
匹配ro
或ros
。它与Linux文件名通配符中的“任何字符”都不匹配。如果这是您想要的,请使用与任何字符匹配的句点(
)。我认为您误用了^
特殊字符。您是想用它来匹配输入字符串的开头,还是求反,或者两者兼而有之?如果您想在rose
中找到ros
,这是可行的:(在$
后面添加一个空的替代项)请提供您想要匹配的文本示例,Unix shell中不希望匹配?
和*
的文本示例不是“Linux正则表达式”,而是“shell全局”通配符。Linux中的正则表达式(grep、sed、awk)也都使用
作为单个替换字符。