我有以下正则表达式,一个带有\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
不是最后一个单词,也可以匹配它。