..


Sponsrade länkar

PCRE reguljära uttryck funktioner (och skillnader med POSIX-funktioner)

Artikel skriven av Max Bossi
Sidan 1 av 4

Vi hade redan antytt under de senaste dagarna genom sidorna i vår blogg, men i dag jag skulle vilja undersöka ett ämne som jag tror kommer vara av intresse för tusentals utvecklare - som jag - varje dag använder PHP för att utveckla sina webbapplikationer.

Från och med version 5.3 av PHP, i själva verket kan utvecklare som vill utnyttja möjligheterna med reguljära uttryck inte längre använda sig av POSIX funktioner (så att säga ereg () och familjen) men måste, med nödvändighet, använda funktionerna PCRE (Perl Compatible Regular uttryck), till exempel, preg_match () .

Den PCRE funktioner inbyggda i PHP kan du använda den typiska syntaxen för reguljära uttryck i Perl (mer specifikt, ger den nuvarande implementationen stöd till syntaxen i Perl 5,005), vilket skiljer sig något från den i POSIX funktioner. För mer information om syntaxen för PCRE är möjligt att konsultera bruksanvisningen finns tillgänglig på den officiella hemsidan PCRE.org.

Jämförelser: den preg_match ()

Om du vill göra en jämförelse mellan en sträng och ett mönster (en modell skriven i form av reguljära uttryck) kommer att behöva använda preg_match () som i själva verket ersätta ereg () och eregi ().

Använda preg_match () är i allmänt bruk, ganska enkelt: du passerar funktionen mönstret och strängen för att kontrollera. Om mönstret är nöjd, returnerar funktionen 1 om 0 (eller FALSKT om ett fel).

Faktum är att migrera från ereg () är inte komplicerad sak. Du kommer att behöva någon liten uppfinningsrikedom i utformningen av mönstret.

Här är ett exempel:

 



 <? Php







 if (preg_match ('/ mrwebmaster / i "," Leve MrWebmaster!')) {



  



 echo "Hittade";







 Else {}



  



 echo "hittades inte";







 }







 ?>

 
Detta är samma:
 



 <? Php







 if (eregi ("mrwebmaster", "Leve MrWebmaster! ')) {



  



 echo "Hittade";







 Else {}



  



 echo "hittades inte";







 }







 ?>

 

I vårt enkla exempel med hjälp av preg_match () vi använde den sträng som ett mönster

 



 / Mrwebmaster / s

 
Låt oss se syntaxen:
  • / ... / - Avgränsa början och slutet av uttrycket;
  • mrwebmaster - är en enkel sträng som du vill kontrollera den text som skickas som andra argument;
  • I - "jag" efter sista skiljetecken anger att sökningen ska INTE skiftlägeskänsliga (precis som gjordes med hjälp av funktionen eregi ()). Tekniskt "Jag" är en modifierare i denna sida en komplett lista över modifierare tillåtna i syntax PCRE.

Skillnaden med ereg ()

Som ni kan se skillnaden med ereg () är inte mycket, låt oss sammanfatta dem kort:

  • användning av avgränsare / ... / (faktiskt du kan använda andra tecken som avgränsare, men snedstreck är den vanliga val);
  • skiftlägesokänslig version (eregi ()) ska ersättas med användningen av "jag" efter det avslutande avgränsare;
  • förekomsten av tecknet / i mönstret kommer att kräva (om du är van vid snedstreck som avgränsare) escape (\ /) för att inte förväxlas med avgränsare;
  • Det finns några små skillnader i hanteringen av ASCII-tecken (POSIX-funktioner, till skillnad från PCRE accepterar numeriska ASCII-tecken:. T.ex. motsvarar antalet 10 och 13 nya linjen vagnretur, tvärtom med PCRE funktioner 10 representerar enbart antalet tio).
  • funktionen ereg () accepterar endast tre parametrar (mönster, text som ska kontrolleras och eventuellt en array för att hålla resultat) och preg_match () medger fem (de två första har vi redan sett, krävs de tre övriga är valfria );

På grundval av ovanstående (och skillnader som har nämnts) kan vi tänka igen (delvis) gäller teoretiska förklaringar om syntaxen i reguljära uttryck kan hittas på denna sida av artikeln "reguljära uttryck i PHP" tillägnad den gamla POSIX funktioner .

I samma kategori ...
E-Learning
Linux (kurs) Linux (kurs)
Komplett av öppen källkod-system. Från 49 €.
MySQL (kurs) MySQL (kurs)
Hantering av öppen källkod databas. Från 39 €.
PHP (kurs) PHP (kurs)
Fullständig kurs för att skapa dynamiska webbplatser. Från 49 €.
Sponsrade länkar