Отрицание обратной ссылки в регулярных выражениях
если строка имеет этот прогнозируемый формат:
value = "hello and good morning"
Где "(цитаты) также могут быть" (одинарные кавычки), а закрывающий символ ('или ") будет таким же, как и начальный. Я хочу сопоставить строку между кавычками.
\bvalue\s*=\s*(["'])([^\1]*)\1
(две \ s разрешают пробелы возле знака =)
Первая «захваченная группа» (внутри первой пары скобок) - должна соответствовать открывающей кавычке, которая должна быть либо «, либо» затем - я должен разрешить любое количество символов, которые не были захвачены в первой группе, и тогда я ожидаю, что символ, захваченный в группе (кавычки).
(требуемая строка должна быть записана во второй группе захвата).
Это не работает, хотя.
Это делает:
\bvalue\s*=\s*(['"])([^"']*)["']
но я хочу убедиться, что и кавычка открытия и закрытия (двойная или одинарная) одинаковы.
РЕДАКТИРОВАТЬ
Цель состояла в том, чтобы в основном получить открывающий тег якоря, у которого есть определенное имя класса, включенное в его атрибут класса, и я хотел охватить редкий случай атрибута класса, включая (') или (()).
Следуя всем советам здесь, я использовал шаблон:
<\s*\ba\b[^<>]+\bclass\s*=\s*("|'|\\"|\\')(?:(?!\1).)*\s*classname\s*(?:(?!\1).)*\1[^>]*>
Смысл:
Найдите метку-открытый знак.
Разрешить любые пробелы.
Найдислово а.
Разрешить любой не закрывающий тег.
Найти "класс (любые пробелы) = (любые пробелы)"
Получить вводные кавычки, одно из следующих: ("или" или \ "или \ ').
Из ответа Алана Мура: разрешите любые символы, которые не являются открывающими кавычками.
найти имя класса
Разрешить любые символы, которые не являются открывающими кавычками.
Найдите заключительную цитату, которая совпадает с открытием.
Разрешить любые символы раскрывающихся тегов.
Найдите закрывающий тег char.