#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