Necessita de regex para analisar palavra-chave = 'valor' com aspas simples ou duplas

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

  •  12-09-2019
  •  | 
  •  

Pergunta

Estou tendo dificuldade para escrever uma expressão regular (adequado para preg_match () do PHP) que irá analisar palavra-chave = pares de 'valor', independentemente de o string está entre aspas simples ou duplas. IOW em ambas as seguintes casos eu preciso para obter o e onde o string pode conter o tipo não colocando de citações:

name="value"
name='value'
Foi útil?

Solução

Em Perl esta é uma expressão regular que iria funcionar. Combinava primeira para o início da linha, em seguida, corresponde a um ou mais não = personagens e define-los para $ 1. Em seguida, ele procura os = então os a não parênteses com uma escolha de correspondência de "ou" e define que para $ 2.

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

Se você queria para coincidir com expressões em branco como.

Este = ""

Substitua os dois últimos + com * Caso contrário, isso deve funcionar

Editar Como mencionado nos comentários. Doug usado ...

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

Isso irá corresponder a um espaço em branco no final opcional éter de entrada ou o valor e ele removeu o marcador de fim de linha.

Outras dicas

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

O que vai colocar a chave na $1 eo valor em $3.

Alguns anos mais tarde, mas uma vez que esta questão é altamente classificado no Google, e as respostas não satisfazer as minhas necessidades, aqui está uma outra expressão :

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

Isso irá corresponder aspas simples ou duplas, tendo em conta escapou citações, e os valores não cotados.

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

É, no entanto, tem uma limitação no que se um valor está faltando a chave do próximo par chave / valor é lido. Isso pode ser resolvido usando um lista separada por vírgulas de pares chave / valor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top