2013-04-23 17 views
11

Ecco un elenco di esempi di esempi di espressioni regolari di php. forse questo aiuta qualcuno, come amministratore/o un altro utente non può chiarire, che stavo cercando di condividere i miei approcci.Espressioni e corrispondenza regolari

preg_match esegue la ricerca (preg_replace è un sostituto).
preg_match ha tre parametri: preg_match (FindWhat, FindWhere, GivingOutput);

esempio 1):

<?php 
//everything expect letters and numbers 
$text='[email protected]'; 
$newfilename=preg_match('/[^a-zA-Z0-9.]/',$text, $out); 
echo $out[0]; 
?> 
output will be: 
@ 

preg_match trova solo un risultato (il risultato in primo luogo trovato), con due opzioni: [0] o [1].

esempio 2): trovare di tutto (tutti i caratteri, parole ..) dentro i nostri criteri di ricerca:

<?php 
$text='abcdefghijklmnopqrst'; 
$newfilename=preg_match('/ij(.*?)mn/',$text, $out); 
echo $out[0]; 
echo $out[1]; 
?> 
[1] -gives only the inner search result (what we had in the brackets, between "ij" and "mn"): 
kl 

[0] -gives the whole search result: 
ijklmn 

(Si noti che l'opzione [1] non è disponibile se quando tu non utilizzare le parentesi in criteri di ricerca (come abbiamo fatto in precedenza, nell'esempio 1)

esempio 3): se il testo di arrivo ha molte stessi avvenimenti, come questo: $ text = 'ciao utente Jimmy Jones, sono io. ciao utente Mery Pawders, è ancora me. ';

ora, qui ci sono due partite diverse, quindi, abbiamo bisogno di usare preg_match_all

<?php 
$text='hello user Jimmy Jones, its me. hello user Mery Pawders, its me.'; 
$newfilename=preg_match_all('/hello user (.*?) its/',$text, $out); 
foreach ($out[1] as $found_one) {echo $found_one;} 
//or use $out[0] for full search match 
?> 

output will be: 
Jimmy Jones, 
Mery Pawders, 

esempio 4): ricerca tra le tante possibilità:

<?php 
$text = 'member ACCOUNT7'; 
preg_match("/ACCOUNT[123456789]/",$text,$out); 
echo $out[1]; 
?> 

output will be: 
ACCOUNT7 

esempio 5): Per trovare una stringa, mentre il testo di input contiene nuove righe, è necessario utilizzare ** s ** alla fine;

<?php 
$text = 'one 
two 
three'; 
preg_match("/one(.*?)three/s",$text,$out); 
echo $out[1]; 
?> 

output will be: 
two 

esempio 6): La tua ricerca è case sempre sensibile. Per effettuare una ricerca INSENSITIVE del caso, utilizzare i alla fine (se lo si desidera, senza s);

<?php 
$text = 'ONE TWO TREE'; 
preg_match("/one(.*?)three/si",$text,$out); 
echo $out[1]; 
?> 

esempio 7): per la ricerca di caratteri speciali (come /" < * 'ed ecc ..) all'interno preg_match, è necessario utilizzare questo segno di fuga:.? \

<?php 
$text = 'hello Jimmy/Kroger '; 
preg_match("/Jimmy\/Kroger/",$text,$out); 
echo $out[0]; 
?> 

ora, possiamo usare^operatore, che cerca i risultati al contrario.

esempio 8): trovare tutto piuttosto che lettere e numeri:

<?php 
$text = '[email protected]*&^)($%'; 
preg_match_all('/[^a-zA-Z0-9.]/',$text,$out); 
foreach ($out[0] as $varr) {echo $varr;} 
?> 
output will be: 
@*&^)($% 

per ricerca e sostituzione, abbiamo una struttura po 'diverso, come abbiamo bisogno di usare la nuova variabile.

esempio 9): trovare e sostituire tutto piuttosto che lettere e numeri con altro carattere, utilizzando questo operatore:^

<?php 
$text = 'ab2sq)(&*(%$%^[email protected]%n23f9'; 
$variable = preg_replace('/[^a-zA-Z0-9.]/','a',$text); 
echo $variable; 
?> 
output will be: 
ab2sqn23f9 

esempio 10): cercare e aggiungere qualcosa dentro la trovata resuls:

<?php 
$text = 'Hi, its me, Niko from Austria';  
$variable = preg_replace('/(Niko.*?) from/', '$1 Gomez', $text); 
echo $variable; 
?> 
output will be : 

its me, Niko Gomez Austria 

esempio 11): trovare tutti i link testo all'interno:

<?php 
$text = 'hi, my site is http://example.com, and on my page, at http://example.com/page37/blabla.html i wrote something..'; 
preg_match_all("/[[:alpha:]]+:\/\/[^<>[:space:]]+[[:alnum:]\/]/",$text, $out); 
foreach($out[0] as $varr){echo $varr;} 
?> 
output will be: 
http://example.com 
http://example.com/page37/blabla.html 

esempio 12): come l'esempio 11 (ma con sostituzione) - trovare i link nel testo e metterli nei tag ancorate:

<?php 
$text = 'hi, my site is http://example.com, and on my page, at http://example.com/page37/trid.html i wrote something..';  
$variable = preg_replace("/[[:alpha:]]+:\/\/[^<>[:space:]]+[[:alnum:]\/]/",'<a href="\\0">\\0</a>', $text); 
echo $variable; 
?> 

uscita sarà la stessa frase , ma i collegamenti saranno ancorati.

1) Suggerimenti: non utilizzare preg_match() se si desidera controllare solo se una stringa è contenuta in un'altra stringa. Usa invece stristr() o strpos() poiché saranno più veloci.

2) ** più avanzate, esempi specifici su PHP espressioni regolari, uso Google, o vedere ** opzioni complete e manuali su - http://www.php.net/manual/en/reference.pcre.pattern.syntax.php

(È possibile rivedere a breve tutta la lista degli operatori qui -
http://www.catswhocode.com/blog/15-php-regular-expressions-for-web-developers
http://www.noupe.com/php/php-regular-expressions.html
)

3) per i codici HMTL, esistono luce speciale, php morbido, called- Dom Parser. ma a volte, se conosci bene le espressioni regolari di php, potresti non aver bisogno di dom parser.

+0

Come sarebbe avviare un e-mail con 'Shop' e terminare con' 0'? 'SHOP_psgarden_0' non è un indirizzo email valido. –

risposta

1

Prova questa espressione regolare:

/^Shop.*0$/i 

Questo uno verifica la presenza di un negozio all'inizio e uno zero alla fine.

+0

ma questo include^mark. questo significa "opposto", vero? anche, la risposta di cui sopra con molti esempi, è stata molto buona, perché sei stato non soddisfatto? –

+0

No, significa inizio e il dollaro firma la fine di un input. Vedi anche [questa tabella] (http://en.wikipedia.org/wiki/Regular_expression#POSIX_Basic_Regular_Expressions) in wikipedia: * '^' Trova la posizione iniziale all'interno della stringa. In strumenti basati su linee, corrisponde alla posizione di partenza di qualsiasi riga. * E * '$' Trova la posizione finale della stringa o la posizione appena prima di una fine riga che termina la stringa. Negli strumenti basati sulla linea, corrisponde alla posizione finale di qualsiasi riga. * – rekire

+0

grazie. devo controllare, cosa fanno i segni^& $. –

1

Presumo, quando si dice "$ email", che si intende la roba prima del segno @. In questo caso è possibile utilizzare questa espressione regolare:

$email = '[email protected]'; 
if (preg_match('/^shop.*[email protected]/i', $email) === 1) { 
    echo 'Yes!'; 
} 

È inoltre possibile controllare utilizzando il codice di procedura normale:

$email = '[email protected]'; 
$local = substr($email, 0, strpos($email, '@')); 
$amalgam = substr($local, 0, 4) . substr($local, -1); 
if (strcasecmp('shop0', $amalgam) === 0) { 
    echo "yes"; 
} else { 
    echo "no"; 
} 
Problemi correlati