Enkonduko Al Regulaj Esprimoj En PHP
De Bernard Peh
En Linukso kaj Unix, La sintakso kiu estas ofte uzita de multaj aplikoj por specifanta tekstajn skemojn estas konata kiel regulaj esprimoj aŭ en mallonga formo – Regex. Regex estas tre potenca tekniko priskribi skemojn kaj multajn programojn uzas ilin priskribi sekvencoj de signoj egalotaj. Serĉu programojn kiel 'grep’ dependu multe de regex. Esence regex formas la kernon en la linuksa mondo. Multaj skriptlingvoj kiel perl, rubeno, Php…ktp ankaŭ enkonstruis regex-funkciojn. Do vi povas vidi, lerni regulan esprimon gravas ĉar ili estas multe uzataj en multaj lokoj kaj verŝajne pli estonte.
Regex povas esti timiga komence sed se vi povas akiri la bazaĵojn, vere ne estas tro malfacile kompreni. En ĉi tiu artikolo, ni rigardos kiel regex venas en la bildon kiam vi verkas php-aplikaĵojn.
Fari rapidan resumon ĝis nun, regula esprimo estas sinsekvo de laŭvortaj signoj, ĵokeroj, modifiloj kaj ankroj.
Laŭvortaj Karakteroj
Laŭvortaj signoj estas literoj, ciferoj kaj specialaj signoj, kiuj kongruas nur kun si. Ekzemploj estas abc, 123, ~@ kaj tiel plu (iuj signoj tamen estas rezervitaj).
– Inkluziva gamo [m-n] kongruas kun unu el iu ajn karaktero inkluzivita en la intervalo de m ĝis n.
Ekzemplo '[a-z]’ kongruos kun ajna alfa signo kiu falas en la a ĝis z gamo.
– Intervalo de ekskludo [^m-n] kongruas kun iu ajn signo ne inkluzivita en la intervalo de m ĝis n. Ekzemplo '[^ 0-9]’ kongruos kun ajna necifera signo.
– Periodo “.” kongruas kun ajna karaktero. Ĝi ankaŭ estas konata kiel la ĵokero. Ekzemplo ‘ a.c’ kongruos kun 'aec', 'acc', ‘a@a’ kaj tiel plu.
– La eskapa karaktero ” ebligi interpretadon de specialaj signoj. Ekzemplo ‘ a.c’ kongruos 'ac’ nur. Memori tion '.’ estas rezervita signo por reprezenti ĵokeron? Tial egali periodon, te '.', Ni bezonas eskapi ĝin kiel tia '.’
– la esprimo [:alnum:] kongruas ĉiuj alfa-nombra karakteroj. Estas fulmoklavo por [A-Por-Z0-9]. Kiel vi povas vidi, ne vere ŝparvojo. la esprimo [:alnum:] povus esti pli facile memori por iuj personoj.
– la esprimo [:alfa:] kongruas ĉiuj alfa karakteroj. Estas fulmoklavo por [A-Za-z].
– la esprimo [:malplenan:] kongruas spaco aŭ langeto.
– la esprimo [:cifera:] kongruas nombran cifera. Estas fulmoklavo por [0-9].
– la esprimo [:malsupera:] kongruas ĉiuj minuskla literoj. Estas fulmoklavo por [a-z].
– la esprimo [:supra:] kongruas ĉiuj majusklajn literojn. Estas fulmoklavo por [A-Z].
– la esprimo [:punkto:] kongruas ĉiuj printebla karakteroj, ekskludante spacoj kaj alphanumerics.
– la esprimo [:spaco:] kongruas spaceto karaktero.
modifiloj
A modifilo ŝanĝas la signifon de la tuj antaŭa mastro karaktero.
– asterisko (‘*’) alumetoj 0 aŭ pli de la antaŭa esprimo. Ekzemple 'a *’ kongruas ”, 'A', 'Aa', 'aaaaa’ kaj tiel plu (Rimarku la uzon de ”. Ĝi simple signifas ke la esprimo egalas nenion krom).
– A demandosigno (‘?’) alumetoj 0 aŭ 1 de la antaŭa termino. Ekzemplo ‘a?’ kongruas ” kaj ‘a’ nur.
– Plus-signo (‘+’) alumetoj 1 aŭ pli de la antaŭa esprimo. Ekzemplo ‘a+’ kongruos kun 'a', 'aaaaaaaa’ kaj tiel plu. Ĝi ne kongruos ”.
– {m,n} kongruoj inter m kaj n okazoj de la antaŭa termino. Ekzemplo ‘a{1,3}’ kongruos kun 'a', ‘aa’ kaj ‘aaa’ nur.
– {n} kongruas precize n okazoj de la antaŭa termino. Ekzemplo ‘a{2}’ kongruos kun ‘aa’ nur.
Ankroj
Ankroj establas la kuntekston por la ŝablono kiel ekzemple “la komenco de vorto” aŭ “fino de vorto”.
– La ezoko ‘^’ markas la komencon de linio. Ekzemplo ‘^http’ kongruos kun ajna nova linio kiu komenciĝas per 'http'.
– La dolara signo '$’ markas la finon de linio. Ekzemplo 'post$’ kongruos kun ajna linio kiu finiĝas per 'post'. (Variabloj en php komenciĝas per $. Provu ne konfuzi kun ĝi).
Grupiĝo
Grupiĝo '( )’ permesas modifilojn apliki al grupoj de regex-specifiloj anstataŭ nur la tuj procedanta specifilo. Ekzemplo '( aa | bb )’ kongruos ĉu ‘aa’ aŭ 'bb’
Sufiĉe da enuigaj aferoj, estas tempo bone uzi tion, kion la teorio de regex.
PHP-Efektivigo
Estas 2 ĉefaj variantoj de regex, Perl-kongrua regex (PCRE) kaj POSIX-Etendita. PHP ofertas sufiĉe multajn funkciojn por efektivigi ĉi tiujn 2 specoj de regex. En PHP, la plej ofte uzata PCRE-funkcio estas 'preg_match’ kaj en POSIX-plilongigita regex, 'sendi'. Ambaŭ sintaksoj estas iomete malsamaj sed same potencaj. La prefero uzi 'preg_match’ aŭ ‘ereg’ estas tute laŭ individua kvankam Zend sugestis ke preg_match estas iomete pli rapida. Mi preferas uzi ‘eregi’ simple pro mia fono en linuksa administrado.
Ekzemplo 1: Kongrua Usono 5 aŭ 9 ciferaj poŝtkodoj
Poŝtkodoj en Usono havas la jenan formaton ##### aŭ #####-#### kie # estas cifero. Se vi volas kontroli la poŝtkodon senditan, diru el interreta formularo, vi devos uzi regex ie en via skripto por kontroli ĝin. La kongrua POSIX-plilongigita regex ŝablono estos:
[[:cifera:]]{5}(-[[:cifera:]]{4})?
Konfuzita? Atendu, mi klarigu kial. Ĉi tiu regex estas dividita en 2 partoj: [[:cifera:]]{5} kaj (-[[:cifera:]]{4})?.
Unua Parto: ‘[[:cifera:]]’ signifas la ciferintervalo kaj {5} signifas ke la cifero devas okazi 5 fojojn.
Dua Parto: La krampo '( )’ grupigas la '-[[:cifera:]]{4}’ kune kaj la '?’ signifas la esprimon '(-[[:cifera:]]{4})’ povas aŭ okazi 0 aŭ 1 tempo.
Por efektivigi la regex en PHP, ni uzas la jenan kodon:
$poŝtkodoj = 'xxxxx-xxxx';
$ŝablono = '[[:cifera:]]{5}(-[[:cifera:]]{4})?’;
se (vidu($ŝablono,$poŝtkodoj)) {
eĥo “kongrua trovita “;
}
alie {
eĥo “kongruo ne trovita”;
}
Ekzemplo 2: Kongruaj Datoj
Diru, ke ni volas kontroli la datojn enigitajn de la uzanto. Se ni nur akceptas datojn kiel “JJYY-MM-JJ” aŭ “YYYY-M-D”, la regex ŝablono estos
[0-9]{4}(-[0-9]{1,2})+
La '+’ malantaŭ la termino (-[0-9]{1,2}) signifas ke la termino devas okazi almenaŭ unufoje. Notu, ke mi ankaŭ povas reverki la regex kiel:
[[:cifera:]]{4}(-[[:cifera:]]{1,2})+
aŭ
[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}
Kiel vi povas vidi, povas esti multaj solvoj al problemo…
konkludo
Regex povas esti malfacile digestebla komence sed la logiko estas simpla se vi kapablas praktiki pli. Lerni regex estas same grava kiel lerni PHP. Pliaj ekzemploj videblas ĉe web-developer.sitecritic.net. Bonŝancon.
Bernard Peh estas granda pasiulo de retaj teknologioj kaj unu el la kunfondintoj de Sitecritic.net Recenzoj. Li laboras kun spertaj retprojektistoj kaj programistoj por pli ol 5 jaroj, evoluigante kaj dezajnante komercajn kaj nekomercajn retejojn. Dum sia libera tempo, li faras recenzojn pri retejoj, sendependa SEO kaj PHP funkcias. Vizitu lian blogon ĉe Melburno PHP
artikola Fonto: http://EzineArticles.com/?spertulo=Bernard_Peh
http://EzineArticles.com/?Enkonduko-Al-Regulaj-Esprimoj-En-PHP&id=222113