Шаблон регулярного выражения для соответствия строке без двух последовательных повторяющихся символов

Я могу очень легко написать регулярное выражение для сопоставления строки, содержащей 2 последовательных повторяющихся символа:

/(\w)\1/

Как мне сделать дополнение к этому? Я хочу сопоставить строки, в которых нет двух последовательных повторяющихся символов. Я безуспешно пробовал варианты следующего:

/(\w)[^\1]/ ;doesn't work as hoped
/(?!(\w)\1)/ ;looks ahead, but some portion of the string will match
/(\w)(?!\1)/ ;again, some portion of the string will match

Я не хочу, чтобы какой-либо язык/платформа использовала отрицание регулярного выражения. Мне нужен простой способ сделать это.


person at.    schedule 21.03.2015    source источник
comment
попробуй ^(?!.*(\w)\1).*   -  person Avinash Raj    schedule 21.03.2015
comment
опубликовать несколько примеров вместе с ожидаемым результатом?   -  person Avinash Raj    schedule 21.03.2015
comment
@AvinashRaj - это сработало! Я не совсем уверен, почему это сработало ... Думаю, мне нужно прочитать о прогнозах, поскольку я явно не полностью их понимаю. Напишите свой ответ как ответ.   -  person at.    schedule 21.03.2015


Ответы (1)


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

^(?!.*(\w)\1).*

(?!.*(\w)\1) отрицательный просмотр вперед, который утверждает, что строка, которая будет сопоставлена, не будет содержать повторяющихся символов. .*(\w)\1 будет соответствовать строке, которая содержит повторяющиеся символы в середине, в начале или в конце. ^(?!.*(\w)\1) соответствует всем начальным границам, кроме той, которая содержит повторяющиеся символы. И следующий .* соответствует всем символам, существующим в этой конкретной строке. Обратите внимание, что this также соответствует пустым строкам. Если вы не хотите сопоставлять пустые строки, измените .* в конце на .+

Обратите внимание, что ^(?!(\w)\1) проверяет наличие повторяющихся символов только в начале строки или строки.

Lookahead и lookbehind, совместно называемые "lookaround", являются утверждениями нулевой длины, как и начало и конец строки. Они не потребляют символы в строке, а только утверждают, возможно совпадение или нет. Lookaround позволяет вам создавать регулярные выражения, которые невозможно создать без них или которые без них стали бы очень длинными.

person Avinash Raj    schedule 21.03.2015