2014-03-02 1 views
1

я хочу regx, чтобы соответствовать любому слову 2 или 1 символов, например (есть, или, если а)Как соответствовать только 1 или 2 символов с регулярным выражением

я попытался это: -

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

Что это значит «ничего»? У вас должны быть какие-то матчи. – Jerry

+0

На самом деле ваш код соответствует двум или двум буквам. Это мой вывод: он, ll, o, ev, er, yo, ne, th, is, is, ju, st, te, st, aa. – wumpz

ответ

4

Вы, вероятно, хотите использовать word boundary anchors:

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

Этих якоря совпадают в начале/конце буквенно-цифровых «слов», то есть, в позиции перед тем, как \w характером, если нет \w характера до того, или после символа \w, если нет \w знак после этого.

1

Я думаю, что вы должны быть немного более наглядными. Ваш текущий код returns 15 от переменной scount. Это не ничего.

Если вы хотите, чтобы получить количество 2 букв слова, и это за исключением подчеркивания, цифр в этом счете, я думаю, что вы бы лучше с отрицательным lookarounds:

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

С строкой вход hello everyone this is just 1 test aa, вы получите значение scount как 2 (is и aa), а не 3 (is, 1, aa), как вы бы, если вы ищете только 1 или 2 последовательных \w.

Кроме того, с hello everyone this is just test aa_, вы получаете счетчик 1 с \w (is), но 2 (is, aa) с lookarounds.

 Смежные вопросы

  • Нет связанных вопросов^_^