PDA

View Full Version : [PHP]Espressione regolare


SCYHO
24-02-2007, 14:44
Ciao ragazzi.

Ho bisogno di un'espressione regolare che data ad esempio la stringa 123blabla

mi restituisca solo blabla, cioè elimini le prime cifre finkè sono numeri. Ho provato in questo modo ma mi fa la cosa inversa, cioè mi restituisce solo i numeri.


$stringa = "123blabla";
preg_match("/^[0-9]*/",$stringa,$match);
echo $match[0]; //restituisce 123


grazie per l'aiuto

dinkydinkydinky
24-02-2007, 19:23
Ciao, il primo campo della funzione "preg_match" consiste nel pattern. Nel tuo caso con "/^[0-9]*/", la funzione ti ritornerà in $match[0] solo i numeri contenuti nella stringa passata come input. A questo punto basta che elimini i numeri trovati all'inizio della stringa, ad esempio utilizzando la funzione "substr".
Ecco il codice:

<?php
$stringa = "123blabla";
preg_match("/^[0-9]*/", $stringa, $match);
$stringa = substr($stringa, strlen($match[0]));
echo $stringa;
?>

Spero ti sia di aiuto :D, Ciao!

andbin
24-02-2007, 19:32
Ho bisogno di un'espressione regolare che data ad esempio la stringa 123blabla

mi restituisca solo blablaFai così:
preg_match("/^[0-9]*(\\w+)/",$stringa,$match);
Se fai un var_dump di $match ottieni:
array(2) {
[0]=>
string(9) "123blabla"
[1]=>
string(6) "blabla"
}Sicuramente hai già capito cosa succede: in $match[0] hai l'intera parte matchata, mentre in $match[1] solo la parte catturata dalle parentesi.

EDIT: Se invece di usare \w (che prende un "word" character) vuoi prendere qualunque cosa, puoi mettere (.+)

SCYHO
25-02-2007, 16:28
Fai così:
preg_match("/^[0-9]*(\\w+)/",$stringa,$match);
Se fai un var_dump di $match ottieni:
array(2) {
[0]=>
string(9) "123blabla"
[1]=>
string(6) "blabla"
}Sicuramente hai già capito cosa succede: in $match[0] hai l'intera parte matchata, mentre in $match[1] solo la parte catturata dalle parentesi.

EDIT: Se invece di usare \w (che prende un "word" character) vuoi prendere qualunque cosa, puoi mettere (.+)


:eek:
perchè non mi trovo?


$stringa2 = $_POST[DepEquip];
preg_match("/^[0-9]*(\\w+)/",$stringa2,$mazz);
echo"$mazz[0]";

SCYHO
25-02-2007, 16:53
scusa la stupiddaggine, errore mio. mi trovo perfettamente.

ultima cosa, se la stringa è un'intera riga? cioè es: "123blabla oppure bloblo"
l'espressione regolare dovrebbe fare lo stesso restituire "blabla oppure bloblo"
ma per ora mi restituisce solo blabla

grazie ancora sciao

andbin
26-02-2007, 08:22
ultima cosa, se la stringa è un'intera riga? cioè es: "123blabla oppure bloblo"
l'espressione regolare dovrebbe fare lo stesso restituire "blabla oppure bloblo"
ma per ora mi restituisce solo blablaL'ho spiegato sopra: \w indica un "word character", quindi è normale che interrompa il match appena trova uno spazio. Usa (.+) invece di (\\w+)

Stiwy.NET
27-02-2007, 14:25
Visto che ci siamo sapete dirmi un ottimo sito dove trovare le istruzioni per le regular expression? E' anni che ne cerco una decente,ma non ne trovo mai.!

andbin
27-02-2007, 14:44
Visto che ci siamo sapete dirmi un ottimo sito dove trovare le istruzioni per le regular expression? E' anni che ne cerco una decente,ma non ne trovo mai.!Innanzitutto bisogna precisare che i costrutti usati per le espressioni regolari non sono uguali e comuni a tutti i linguaggi di programmazione che ne fanno uso.
Ci sono certamente delle basi comuni (es. le classi di caratteri o i quantificatori ? + *) ma molto spesso ogni linguaggio di programmazione ha il suo "set" di costrutti che magari contiene dei costrutti particolari o differisce da altri linguaggi per delle sottigliezze.

Comunque si può partire da qui:
http://en.wikipedia.org/wiki/Regular_expression