Hai bisogno di regex per analizzare = parola chiave 'valore' con virgolette singole o doppie
-
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
name="value"
name='value'
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.