Ho 2 testi in una string:
% Juan%
% Juan Gonzalez%
E voglio solo essere in grado di get% Juan% e non quello con lo Spazio, ho provato diversi Regex senza fortuna. Attualmente utilizzo:
/%(.*)%/U
ma ottiene entrambe le cose, ho provato ad aggiungere e giocare con [^ \ s] ma non funziona.
Qualche aiuto per favore?
Il problema è questo .
corrisponde a qualsiasi carattere ma a una nuova row. La modalità non regolare /U
rende solo .*
pigro e cattura un text dal %
su alla prima %
a destra della prima %
.
Se le tue stringhe contengono un paio di %...%
, puoi usare
/%(\S+)%/
Guarda la demo regex
Il model \S+
corrisponde a 1+ caratteri diversi da uno spazio bianco e all'intera class di caratteri [^\h%]
negata che corrisponde a qualsiasi carattere tranne uno spazio orizzontale e un simbolo %
.
Se hai più coppie %...%
, puoi usare
/%([^\h%]+)%/
Guarda un'altra demo regex , where \h
corrisponde a qualsiasi spazio bianco orizzontale.
Demo PHP :
$re = '/%([^\h%]+)%/'; $str = "%Juan%\n%Juan Gonzalez%"; preg_match_all($re, $str, $matches); print_r($matches[1]);
not the one with the Space
= non [^
+ spazio \s
+ ]
in esso.
Ma non può avere nemless un %
in esso.
Funziona come %([^\s%]+)%
Ma, per un credito extra, potresti / dovresti anche abbinare quello con lo spazio
in esso per assicurare una configuration bilanciata del delimitatore.
(?:%([^\s%]+)%|%[^%]*%(*SKIP)(*FAIL))
spiegato
(?: % ( [^\s%]+ ) # (1), Tag you need % | % [^%]* % (*SKIP)(*FAIL) # Consume, but don't match other tags )