Нужно регулярное выражение для синтаксического анализа keyword='value' с одинарными или двойными кавычками

StackOverflow https://stackoverflow.com/questions/962120

  •  12-09-2019
  •  | 
  •  

Вопрос

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

name="value"
name='value'
Это было полезно?

Решение

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

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

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

Это=""

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

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

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

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

Другие советы

/^(\w+?)=(['"])(\w+?)\2$/

Который поместит ключ в $1 и ценность в $3.

С опозданием на несколько лет, но поскольку этот вопрос занимает высокое место в Google, а ответы не удовлетворили мои потребности, вот еще один выражение:

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top