2008-10-17 3 views
2

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

Например:

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

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

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

спасибо.

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

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

ответ

8

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

(\w+)\W+\1 
+0

NNNEEeeeeAAAAAAAHhhhhhhhhh ..... НЕ СЛОВО !!!! ЭТО ОНО! СПАСИБО !!! – Keng 2008-10-17 20:59:25

0

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

diam, diam, really, really, twice. 

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

1

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

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

\W: не-буквенный символ

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

[[\w|\W]+ ]+: .. .Применение с пространством в какой-то момент, все возникающие 1 или более раз