Регулярное выражение для повторяющихся слов с пунктуацией - PullRequest
2 голосов
/ 18 октября 2008

Что я хочу сделать, это проверить наличие дублированных слов рядом друг с другом, но даже если между ними есть знаки препинания.

Например:

Vivamus Vivamus diam, diam, Vivamus Vivamus diam, diam Vivamus

здесь должно быть 4 разных попадания.

Я не могу понять, почему это не работает; Может кто-нибудь объяснить, почему и показать мне, какой должен быть правильный код?

спасибо.

(\w*(?:[ ,\.])*?)\1

PS: из-за путаницы, которую это вызывает, я не собираюсь говорить, что использую движок Perl.

Ответы [ 3 ]

8 голосов
/ 18 октября 2008

(?: - это не фиксирующая скобка, то есть она не будет хранить совпадения. Вам нужно будет использовать круглые скобки.

(\w+)\W+\1
1 голос
/ 14 октября 2017

[[\w|\W]+ ]+ работал для меня. Разбивка:

\w: символ слова

\W: несловесный символ

[\w|\W]+: каждый символ может быть символом слова или неслова и повторяться 1 или более раз

[[\w|\W]+ ]+: ... в некоторой точке добавляется пробел, все встречается 1 или более раз

0 голосов
/ 18 октября 2008

Исходное выражение не создает отдельного захвата для пунктуации, но включает в себя захваченную пунктуацию в первом захвате. Это означает, что он будет определять такие вещи, как:

diam, diam, really, really, twice.

Но вы не очень заинтересованы в пунктуации, поэтому решение tj111 работает правильно, хотя объяснение '(?:) - это не захватывание скобок "несколько ... неполно? Цитируемый комментарий точен, но это не то, почему общее регулярное выражение не удалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...