我有以下正则表达式,一个使用\p{Punct}
,另一个没有
摘录(1):
add(\s[\w\p{Punct}]+)+(\s#\w+)*
摘录(2):
add(\s[\w]+)+(\s#\w+)*
如果我输入“add buy a egg #grocery testing”,它将导致(1)中的匹配,但不会匹配(2)。知道发生了什么吗?
答案 0 :(得分:4)
您的第二个正则表达式允许#
仅在字符串中最后一个匹配的单词的开头处加上“add”而在您的句子中#
存在于不是最后的单词中。
\p{Punct}
是字符类,其中还包含#
个字符,因此[\w\p{Punct}]
类可让您匹配
\w
字母字符,数字和_
\p{Punct}
标点符号:!"#$%&'()*+,-./:;<=>?@[]^_`{|}~
即使不是最后一个单词,也可以匹配#grocery
。