Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带标点的Java模式匹配_Java_Regex - Fatal编程技术网

带标点的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

我想提供在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}$)
,但即使这样也失败了,因为“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)也都使用
作为单个替换字符。