За последние 24 часа нас посетили 21926 программистов и 1101 робот. Сейчас ищут 723 программиста ...

Отрицание двух подряд идущих символа

Тема в разделе "Регулярные выражения", создана пользователем sgtpepper2000, 6 дек 2021.

  1. sgtpepper2000

    sgtpepper2000 Активный пользователь

    С нами с:
    3 дек 2014
    Сообщения:
    71
    Симпатии:
    2
    Добрый вечер!

    Задался таким вопросом:
    Если отрицание одного дефиса в группе символов будет выглядеть вот так:
    ([^\-]+)

    То как должно выглядеть отрицание двух подряд идущих дефисов?
    Написал ([^\-\-]+), но задумался и понял, что это выражение эквивалентно верхнему. Подскажите, пожалуйста, можно ли это реализовать?
     
  2. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Моя шпаргалка:
    Код (Text):
    1. не попадают в результаты
    2. (?=subexp)         look-ahead = идет после слова
    3. (?!subexp)         negative look-ahead = не идет после слова
    4. (?<=subexp)        look-behind = идет перед словом
    5. (?<!subexp)        negative look-behind  = не идет перед словом
    Соответственно, всё становится проще:
    Код (Text):
    1. (?<=--)(\w+)
     
    sgtpepper2000 нравится это.
  3. sgtpepper2000

    sgtpepper2000 Активный пользователь

    С нами с:
    3 дек 2014
    Сообщения:
    71
    Симпатии:
    2
    @twim32, спасибо!
    Мне как раз подошел negative look-behind.

    Вот это:
    RewriteRule ([^\-\-]+)--([^\-]+)-([^\-\-]*)$ $1&$2=$3

    Превратилось в это:
    RewriteRule (?<!--)([^\/]+)--([^\-]+)-([^\-\-]*)$ $1&$2=$3
     
    twim32 нравится это.