用于特殊字符之间多个单词的正则表达式

时间:2017-06-18 12:46:33

标签: java regex

我试图在Java中使用正则表达式在一些特殊字符之间用至少一个单词来获取每组单词。这些是一些示例字符串,以澄清它:

OPTIONAL
FILTER
bound
FILTER not exists
bound
...

我的比赛应如下所示:

[^\d\W\\a\@]+

这是我到目前为止提出的正则表达式:

FILTER not exists

您可以在此处进行测试:https://regex101.com/r/cP3Uri/2

我的问题是我的正则表达式只能找到完整的单词而且没有单词组(中间有空格)。这意味着这个子串body { background: black; } 将得到3个匹配(每个单词一个)但我希望它只是一个匹配。

任何人都可以帮我找到正确的正则表达式吗?

3 个答案:

答案 0 :(得分:3)

您可以使用[a-zA-Z]{2}[a-zA-Z ]*\\b查找至少两个字符的单词

  • [a-zA-Z]{2}:恰好匹配2个大写或小写字母
  • [a-zA-Z ]*\\b:匹配零个或多个大写和小写字符,字边界

要仅查找单词后跟只有空格的单词,请使用

[a-zA-Z]{2}(?:\\s*[a-zA-Z]{2,})*

答案 1 :(得分:2)

\w+(?:\s*\w+)*

用于捕获包括'a'和2个字符

在内的所有组
\w{2}(?:\s*\w+)*

仅捕获具有多个字符的组

您可以用[a-zA-Z]替换\ w以排除数字。

请参阅https://regex101.com/r/cP3Uri/7

答案 2 :(得分:1)

您可以使用其中一种符合原始模式的内容:

[^\d\W\\a\@]([^\d\W\\a\@]| )*\b
[^\d\W\\a\@]+( +[^\d\W\\a\@]+)*

请参阅演示:12