关于\ p {Punct}的Java Regex帮助

时间:2014-11-02 18:39:08

标签: java regex

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

摘录(1):

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

摘录(2):

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

如果我输入“add buy a egg #grocery testing”,它将导致(1)中的匹配,但不会匹配(2)。知道发生了什么吗?

1 个答案:

答案 0 :(得分:4)

您的第二个正则表达式允许#仅在字符串中最后一个匹配的单词的开头处加上“add”而在您的句子中#存在于不是最后的单词中。 \p{Punct}是字符类,其中还包含#个字符,因此[\w\p{Punct}]类可让您匹配

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

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