LINUX.ORG.RU

поиск слова по regexp

 


0

1

Код:

    QRegExp rx("\\b@([a-zA-Z]{1,4})@\\b");

    qDebug() << rx.indexIn("@a@");

Результат:

-1

Почему так, и как всё-таки правильно найти слово по данному регэкспу в любом предложении?

Ответ на: комментарий от bvn13

нет, потому что «hallo@a@hallo» в таком случае тоже матчится, а мне нужно найти не просто текст, а слово в предложении.

alex_custov ★★★★★
() автор топика
Последнее исправление: alex_custov (всего исправлений: 1)
Ответ на: комментарий от alex_custov

Если ты хочешь найти @что-то@, окруженное пробелами и/или концами строки, то (?<=\s|^)@([a-zA-Z]{1,4})@(?=\s|$). Не тестил.

arturpub ★★
()

А твое не работает, потому что \b зеро-матчит переход между \w и \W в любую сторону, а ^, $, \s и @ — все \W.

arturpub ★★
()
Ответ на: комментарий от alex_custov

Можно попробовать (?:\s|^)@([a-zA-Z]{1,4})@(?:\s|$), правда пробелы сожрет, да и черт с ними, просто при subst'е осторожнее будешь. Ну и не тестил само собой.

arturpub ★★
()
Ответ на: комментарий от alex_custov

Глянул доку, \B@([a-zA-Z]{1,4})@(?=\s|$) должно покатить. Ох уж эти плюсовики, вечно переизобретут велосипед, который не едет как надо. Завернули бы пкре или ицу хотя бы, нет надо своих костылей насувать.

arturpub ★★
()
Ответ на: комментарий от arturpub

гм, самое интересное что это подходит, хотя я вроде это проверял самым первым. Ночные писанины, нда.

alex_custov ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.