Отрицание обратной ссылки в регулярных выражениях

, если строка имеет этот прогнозируемый формат:

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[^>]*>

Значение :
Найдите знак открытия тега.
Разрешить любые пробелы.
Найдите слово a.
Разрешить любые незакрывающие теги.
Найдите "класс (любые пробелы) = (любые пробелы)"
Получите открывающие кавычки, одну из следующих: ("или 'или \" или \').
Из ответа Алана Мура: Разрешите любые символы, кроме начальных кавычек.
find classname
Разрешить любые символы, кроме начальных кавычек.
Найдите заключительную цитату, которая совпадает с начальной.
Разрешить любые символы открывающего тега.
Найдите символ закрывающего тега.

41
задан ekad 13 March 2017 в 09:27
поделиться