2014-01-24 4 views
2

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

Сегодня утром я пытался сопоставить пару повторяющихся символов после пробела или начала строки, так что я первый нашел способ, чтобы соответствовать пространству или начало строки: (^|\s)

Затем, чтобы сопоставить пару (буквенно-цифровые): (\w)\1+

Оба работают очень хорошо, но когда я собрал их (^|\s)(\w)\1+, он просто не работает.

Знаете ли вы, почему это неправильно, и какой лучший способ достичь того, что я хочу?

Кстати, я использую this website для проверки своих выражений.

спасибо!

ответ

3

Попробуйте это регулярное выражение:

(?:^|\s)(\w)\1 

Проблема вы используете, захватив группу для (^|\s) и становится \1 и (\w) становится \2 поэтому ваше регулярное выражение не работает.

(?:..) не является захватывающей группой, следовательно (\w) остается \1 (первая группа захвата).

+0

Спасибо! Я потрачу время, чтобы больше узнать о группах! – Lucas

+0

Добро пожаловать. – anubhava

0

(^|\s)(\w)\1+, it just doesn't work

@anubhava дал вам ответ.
Этот комментарий также может помочь.

(^ | \s)  # (1), BOL or whitespace 
(\w)   # (2), Word character 
\1+    # backreference to group 1 (BOL or whitespace) 


(^ | \s)  # (1), BOL or whitespace 
(\w)   # (2), Word character 
\2+    # backreference to group 2 (Word character) 
Смежные вопросы