Я ищу общую конструкцию регулярных выражений, соответствующую всем параметрам x EXCEPT, соответствует шаблону y. Это трудно объяснить как полностью, так и кратко... см. Материал Nonimplication для формального определения.
Например, сопоставьте любой символ слова (\w
) EXCEPT 'p'. Примечание. Я вычитаю небольшой набор (буква "p" ) из большего набора (все словальные символы). Я не могу просто сказать [^p]
, потому что это не учитывает больший ограничивающий набор только словных символов. Для этого небольшого примера, конечно, я мог бы вручную восстановить что-то вроде [a-oq-zA-OQ-Z0-9_]
, что больно, но выполнимо. Но я ищу более общую конструкцию, так что по крайней мере большой положительный набор может быть более сложным выражением. Как и матч ((?<=(so|me|^))big(com?pl{1,3}ex([pA]t{2}ern)
, за исключением случаев, когда он начинается с "My".
Изменить. Я понимаю, что это был плохой пример, так как исключение материала в начале или конце - это ситуация, в которой работают негативные взгляды и взгляды. (Богемианский я все еще дал вам преимущество для иллюстрации этого). Итак... как насчет исключения совпадений, содержащих "Мой" где-то посередине?... Я все еще действительно ищу общую конструкцию, такую как эквивалент регулярного выражения следующего псевдо-sql
select [captures] from [input]
where (
input MATCHES [pattern1]
AND NOT capture MATCHES [pattern2]
)
Если ответ "это не существует, и вот почему...", я тоже хотел бы это знать.
Изменить 2. Если бы я хотел определить свою собственную функцию для этого, это будет что-то вроде (здесь версия С# LINQ):
public static Match[] RegexMNI(string input,
string positivePattern,
string negativePattern) {
return (from Match m in Regex.Matches(input, positivePattern)
where !Regex.IsMatch(m.Value, negativePattern)
select m).ToArray();
}
Я ВСЕГДА просто задаюсь вопросом, существует ли встроенная конструкция регулярного выражения, которая может это сделать.