Требуется регулярное выражение для анализа ключевого слова = 'значение' с одинарными или двойными кавычками - PullRequest
8 голосов
/ 07 июня 2009

У меня проблемы с написанием регулярного выражения (подходит для PHP preg_match ()), которое будет анализировать пары ключевое слово = значение независимо от того, заключена ли строка в одинарные или двойные кавычки. IOW в обоих следующих случаях мне нужно получить и , где строка может содержать не заключающий в себе тип кавычек:

name="value"
name='value'

Ответы [ 3 ]

14 голосов
/ 07 июня 2009

В Perl это регулярное выражение, которое будет работать. Сначала он соответствует началу строки, затем соответствует одному или нескольким не = символам и устанавливает их в $ 1. Затем он ищет = затем скобки без выбора с выбором соответствия для "или" и устанавливает его в $ 2.

/^([^=]+)=(?:"([^"]+)"|'([^']+)')$/

Если вы хотите, чтобы оно совпадало с пустыми выражениями, например.

Эта = ""

Заменить последние два + на * В противном случае это должно сработать

Редактировать Как уже упоминалось в комментариях. Дуг использовал ...

 /^\s?([^=]+)\s?=\s?("([^"]+)"|\'([^\']+)\')\s?/

Это будет соответствовать одному необязательному пробелу на эфирном конце ввода или значения, и он удалил маркер конца строки.

4 голосов
/ 07 июня 2009
/^(\w+?)=(['"])(\w+?)\2$/

, который поместит ключ в $1 и значение в $3.

1 голос
/ 15 мая 2014

Несколько лет спустя, но поскольку этот вопрос получил высокий рейтинг в Google, а ответы не удовлетворили мои потребности, вот еще одно выражение :

(?<key>\w+)\s*=\s*(['"]?)(?<val>(?:(?!\2)[^\\]|\\.|\w)+)\2

Это будет соответствовать одинарные или двойные кавычки, с учетом экранированных кавычек и значений без кавычек.

name = bar
name = "bar"
name = 'bar'
name = "\"ba\"r\""

Однако у него есть ограничение: если значение отсутствует, читается ключ из следующей пары ключ / значение. Эту проблему можно решить, используя разделенный запятыми список пар ключ / значение.

...