Hai bisogno di regex per analizzare = parola chiave 'valore' con virgolette singole o doppie

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

  •  12-09-2019
  •  | 
  •  

Domanda

Ho problemi scrivendo un'espressione regolare (adatto per preg_match PHP ()), che analizzerà le coppie di parole chiave = 'valore', indipendentemente dal fatto che il stringa è racchiusa tra virgolette singole o doppie. IOW in entrambi i seguenti casi ho bisogno di ottenere il e dove il stringa può contenere il tipo non racchiude di citazioni:

name="value"
name='value'
È stato utile?

Soluzione

In Perl si tratta di un'espressione regolare che avrebbe funzionato. E prima abbinato per l'inizio della linea poi partite per uno o più non = caratteri e li mette a $ 1. Successivo sembra per i = allora le a non parentesi con una scelta di corrispondenza per "o 'e imposta che a $ 2.

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

Se si voleva abbinare espressioni vuote come.

Questa = ""

Sostituire gli ultimi due + con un * In caso contrario, questo dovrebbe funzionare

Modifica Come accennato nei commenti. Doug utilizzato ...

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

Questo corrisponderà uno spazio bianco opzionale sull'estremità etere dell'ingresso o del valore e lui ha rimosso alla fine della linea marcatore.

Altri suggerimenti

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

che porrà la chiave nella $1 e il valore in $3.

A pochi anni di ritardo, ma dal momento che la questione è altamente classificato su google, e le risposte non ha soddisfatto le mie esigenze, ecco un altro espressione :

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

Questa corrisponderà virgolette singole o doppie, tenendo conto sfuggito citazioni, ei valori non quotati.

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

E, tuttavia, ha una limitazione che se un valore è mancante la chiave dalla successiva coppia chiave / valore viene letto. Questo può essere risolto utilizzando un elenco separato da virgole di coppie chiave / valore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top