Sto ancora imparando molto su PHP e l'alterazione delle stringhe è qualcosa che mi interessa. Ho usato preg_match prima per cose come la convalida di un indirizzo email o semplicemente la ricerca di richieste.Come preg_match_all() elabora le stringhe?
Sono appena arrivato da questo post What's wrong in my regular expression? ed ero curioso di sapere perché la funzione preg_match_all produce 2 stringhe, 1 w/alcuni dei caratteri eliminati e quindi l'altro con l'output desiderato.
Da quello che ho capito della funzione è che va oltre la stringa carattere per carattere utilizzando il RegEx per valutare cosa fare con esso. Questo RegEx potrebbe essere stato strutturato in modo da bypassare la prima voce dell'array e solo produrre il risultato desiderato?
e così non c'è bisogno di andare in altro thread
$str = 'text^name1^Jony~text^secondname1^Smith~text^email1^example-
[email protected]~';
preg_match_all('/\^([^^]*?)\~/', $str, $newStr);
for($i=0;$i<count($newStr[0]);$i++)
{
echo $newStr[0][$i].'<br>';
}
echo '<br><br><br>';
for($i=0;$i<count($newStr[1]);$i++)
{
echo $newStr[1][$i].'<br>';
}
Questa volontà di uscita
^Jony ~
^Smith ~
^[email protected]~
Jony
Smith
[email protected]
Sono curioso di sapere se il motivo per 2 voci di array è dovuto alla sytax originale della stringa o se è la normale risposta di elaborazione della funzione. Scusa se questo non dovrebbe essere qui, ma sono davvero curioso di sapere come funziona.
grazie, Brodie
L'output conterrà sempre l'intera corrispondenza e una voce per ciascun gruppo di cattura nell'espressione. –
Non una risposta, ma interessante notare qui è il flag 'PREG_SET_ORDER', che restituirà un elenco di risultati più semplice. E mentre non è possibile rimuovere la voce dell'array '[0]' per la corrispondenza completa, è possibile eliminarne il contenuto usando '\ K' nella regex. – mario