我有以下正则表达式,一个带有\p{Punct},另一个没有

摘要(1):

add(\s[\w\p{Punct}]+)+(\s#\w+)*


摘要(2):

add(\s[\w]+)+(\s#\w+)*


如果我输入“添加购买鸡蛋#食品杂货测试”,它将导致在(1)中匹配,但在(2)中不匹配。知道发生了什么吗?

最佳答案

您的第二个正则表达式允许#仅出现在字符串中最后一个匹配单词的开头,并以“ add”表示,而句子中的#出现在并非最后一个单词中。
\p{Punct}是字符类,其中还包括#字符,因此像[\w\p{Punct}]这样的类可以使您匹配


\w字母字符,数字和_
\p{Punct}标点:!"#$%&'()*+,-./:;<=>?@[]^_`{|}~之一


即使#grocery不是最后一个单词,也可以匹配它。

10-06 07:17