Регулярное выражение, чтобы не начинать символы, а затем следовать шаблону

#regex

Вопрос:

Как написать регулярное выражение для шаблона, не начинающегося с char1 или char2, за которым следуют различные шаблоны string1 или string2.

Например, не начинайте с » или ), затем следуют кошка и собака

(кошка

«кошка

) собака

Я старался ^(?!"|)) не начинать с этого.

Комментарии:

1. Попробуй ^[^")]s*(cat|dog)b или ^(?![")].*?b(cat|dog)b

Ответ №1:

В большинстве реализаций регулярных выражений вы можете использовать [^xyz] для обозначения «чего угодно, кроме x, y или z». Таким образом, в вашем случае вы можете использовать [^")](cat|dog) один символ (кроме двух запрещенных), за которым следует «собака» или «кошка». Обратные косые черты гарантируют, что символы будут интерпретироваться буквально.

Комментарии:

1. Хороший ответ, но обратные косые черты не нужны. Символы внутри класса символов считаются буквальными, если только символ не является - или ] .

2. Этот ответ неверен, потому что он не будет совпадать cat ни в начале строки, ни dog в начале строки.

Ответ №2:

Воспользуйся

 (?<![")])(?:cat|dog)
 

Смотрите доказательства.

объяснение

 --------------------------------------------------------------------------------
  (?<!                     look behind to see if there is not:
--------------------------------------------------------------------------------
    [")]                     any character of: '"', ')'
--------------------------------------------------------------------------------
  )                        end of look-behind
--------------------------------------------------------------------------------
  (?:                      group, but do not capture:
--------------------------------------------------------------------------------
    cat                      'cat'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    dog                      'dog'
--------------------------------------------------------------------------------
  )                        end of grouping