如何匹配1或2个字符与正则表达式

时间:2014-03-02 13:54:33

标签: java regex matcher

我希望正则表达式匹配任何2或1个字符的单词示例(是,an,或者,如果,a)

我试过这个: -

int scount = 0;
String txt = "hello everyone this is just test aa ";
Pattern p2 = Pattern.compile("\\w{1,2}");
Matcher m2 = p2.matcher(txt);

while (m2.find()) {
    scount++;
}

但错误的比赛。

2 个答案:

答案 0 :(得分:4)

您可能想要使用word boundary anchors

Pattern p2 = Pattern.compile("\\b\\w{1,2}\\b");

这些锚点在字母数字“单词”的开头/结尾处匹配,即在\w字符之前的位置匹配,如果之前没有\w字符,或者在{{1}之后如果之后没有\w字符,则为字符。

答案 1 :(得分:1)

我认为你应该更具描述性。来自变量scount的当前代码returns 15。那不是没有

如果你想得到2个字母单词的数量,并且不包括下划线,这个数字中的数字,我认为你会有更好的负面看法:

Pattern.compile("(?i)(?<![a-z])[a-z]{1,2}(?![a-z])");

如果字符串输入为hello everyone this is just 1 test aa,则scount的值为2(isaa)而非3 {is,{ {1}},1),如果您只查找1或2个连续aa,则会如此。

此外,对于\w,您使用hello everyone this is just test aa_\w)获得1分,但只有2(isis