Regular Expression Functions
ereg()
ereg_replace()
eregi() // reģistrnejūtīgs tas ir 'A' būs arī 'a'
eregi_replace() // reģistrnejūtīgs
Daži paterni - simboli - nosacījumi:
\ viens no galvenajiem izmatojamiem simboliem [general escape character with several uses]
^ nosaka subjekta sākumu [assert start of subject (or line, in multiline mode)]
$ nosaka subjekta beigas [assert end of subject (or line, in multiline mode)]
. jebkurš simbols izņemot "\n"(jauna rinda) [match any character except newline (by default)]
[ sāk simbolu definēšanu [start character class definition]
| nosaka alternatīvo nosacījumu [start of alternative branch]
( sāk ereg* nosacījumos apakšnosacijumus [start subpattern]
) pabeidz apakšnosacījumu [end subpattern]
? nezinukāiztūlkot [extends the meaning of (also 0 or 1 quantifier also quantifier minimizer]
* 0 vai lielāka vērtība [0 or more quantifier]
+ tā teikt liek noteikt vērtību, kas satur vēl kādu vērtību 1 vai lielāku [1 or more quantifier]
{ simbols nosaka min/max daudzuma sākumu [min/max quantifier]
} to noslēdz
iekš []:
\ general escape character
^ negate the class, but only if the first character
- indicates character range
] terminates the character class
backslash nav alfabēta simbols.
Piemēram, ja gribi atzīmēt "*" simbolu, tad jālieto "\*".
ja vajag atzīmēt pašu "\", tad jālieto "\\" , ja punktu ".", tad "\."
"Neredzamie" simboli:
\a alarm, that is, the BEL character (hex 07)
\cx "control-x", where x is any character
\e escape (hex 1B)
\f formfeed (hex 0C)
\n newline (hex 0A)
\r carriage return (hex 0D)
\t tab (hex 09)
\xhh character with hex code hh
\ddd character with octal code ddd, or backreference
\040 is another way of writing a space
\40 is the same, provided there are fewer than 40
previous capturing subpatterns
\7 is always a back reference
\11 might be a back reference, or another way of
writing a tab
\011 is always a tab
\0113 is a tab followed by the character "3"
\113 is the character with octal code 113 (since there
can be no more than 99 back references)
\377 is a byte consisting entirely of 1 bits
\81 is either a back reference, or a binary zero
followed by the two characters "8" and "1"
\d any decimal digit
\D any character that is not a decimal digit
\s any whitespace character
\S any character that is not a whitespace character
\w any "word" character
\W any "non-word" character
\b word boundary
\B not a word boundary
\A start of subject (independent of multiline mode)
\Z end of subject or newline at end (independent of
multiline mode)
\z end of subject (independent of multiline mode)
Daži piemēri:
pieņemsim mums ir index.php , kurš satur apmēram šādu kodu:
Ja šis php skripts tiks iedarbināts un pārlūkprogrammā tiks ierakstīts
piemēram http://lapa.lv/index.php?string=abc , tad skripts izdrukās vārdu "abc".
aiz string= var buut jebkāda cita vērtība, kas tiks izdrukāta. Netiks izdrukāti vienīgi
kaut kādi specifiski pieprasījumi (bet par to nav stāsts)
Tā:
index.php ir php fails kurš satur augstāk minēto php kodu.
index.php? jautājumszīme ir pieprasījums pec "kaut kā" .
index.php?string ir pieprasījums pēc mainīgā $string .
index.php?string= ir pieprasījums pēc mainīgā $string vērtības (mums būs abc) .
index.php?string=abc ir pieprasījums pēc mainīgā $string ar vērtību "abc" .
$string ir mainīgais, kuram vērtība būs "abc", izsaucot ar index.php?string=abc .
Tā:
ereg ("abc", $string);
// būs paties [true] un izdrukās "abc", ja jebkur mainīgais $string saturēs "abc"
// piemēram index.php?string=123abc123 izdrukās "123abc123" , jo $string satur "abc" .
kods:
links';
$string = $_GET['string'];
if (ereg ("abc", $string)){
echo $string;
}
?>
// --------
ereg ("^abc", $string);
// būs paties [true] izdrukās "abc", ja mainīgis $string sākumā saturēs "abc"
// piemēram index.php?string=abc123 izdrukās "abc123" , jo $string sākumā satur "abc" .
// arī index.php?string=123abc123 un index.php?string=123abc nebūs patiesi jo "abc" ir pa vidu vai beigās.
// simbols "^" kodā.
kods:
links';
$string = $_GET['string'];
if (ereg ("^abc", $string)){
echo $string;
}
?>
// --------
ereg ("abc$", $string);
// izdrukās "abc" ja mainīgis $string beigās saturēs "abc"
// piemēram index.php?string=123abc izdrukās "123abc" , jo $string beigās satur "abc" .
// pieprasījums index.php?string=abc123 nebūs paties, jo "abc" nav beigās, ko nosaka
// simbols "$" kodā.
// arī index.php?string=123abc123 un index.php?string=abc123 nebūs patiesi jo "abc" ir pa vidu vai sākumā.
kods:
links';
$string = $_GET['string'];
if (ereg ("abc$", $string)){
echo $string;
}
?>
// --------
eregi ("(ozilla.[23]|MSIE.6)", $_SERVER['HTTP_USER_AGENT'])
// būs paties, ja lietotāja pārlūkprogramma būs Netscape 2, 3 vai MSIE 6 (Internet Explorer 6).
// un izdrukās "abc", kas noteikts zemāk redzamajā koda paraugā, kur
// mainīgajam piešķirta vērtība "abc".
// ja buus Internet Explorer kāda cita versija vai nebūs Netscape 2, 3,
// tad būs nepaties.
// index.php? kautkāds pieprasījums šajā gadījumā nespēlē nekādu lomu,
// jo nosacījums ir noteikt lietotāja pārlūkprogrammu ar: $_SERVER['HTTP_USER_AGENT']
kods:
// --------
$string = ereg_replace ("^", "
", $string);
// Vienalga arī kāda nebūtu mainīgā $string vērtība, tā sākumā ieliks "
",
// jo paredz nosacījums "^" .
kods:
", $string);
echo $string;
?>
// --------
$string = ereg_replace ("$", "
", $string);
// Vienalga arī kāda nebūtu mainīgā $string vērtība, tā beigās ieliks "
",
// jo paredz nosacījums "$" .
kods:
", $string);
echo $string;
?>
// --------
$string = ereg_replace ("\n", "", $string);
// "\n" ir jauna līnija (pārnest jaunā līnijā (ENTER)). Tādēļ, ja $string saturēs jaunu līniju, to aizvietos pret "neko"
// jauna līnija ir neredzams simbols pārlūkā
// tā teikt izsvītros visus.
kods 1:
kods 2:
// --------
$date = date("Y-m-d");
ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)
// nosacījumu varētu sadalīt trijās daļās ko nosaka
// ()()()
// nosacījums prasa lai datums saturētu YYYY-MM-DD un tad būs patiess
// to paredz pirmais: ([0-9]{4})- kas nozīmē, ka $date jāsatur cipari [0-9]
// un tieši 4 cipari ko nosaka {4} kā arī aiz tiem jābūt "-" simbolam
// to paredz otrais : ([0-9]{1,2})- kas nozīmē, ka $date aiz pirmajiem 4 cipariem un "-" simbola
// jāseko cipariem [0-9] un tiem jābut vai nu vienam vai diviem {1,2}
// kā arī aiz tiem jābūt "-" simbolam
// to paredz trešais: ([0-9]{1,2}) kas nozīmē, ka pēdejā nosacijumā $date jāsatur cipari [0-9]
// un tiem jābut vai nu vienam vai diviem {1,2}
// pēdējais nosacījums neparedz ka $date beigās jāsatur vēl kaut kas,
// tādēļ $date = date("Y-m-d-"); arī būs paties ;)
// ja būs $date = date("Ymd"); tad nosacījums nedarbosies un atgriezīs nepatiesu
kods:
// --------
"\\0" var būt līdz "\\9"
kods:
// --------
kods:
// --------
piemērs e-pasta noteikšanā:
kods:
// Tā, augstāk minētais kods nosaka vai e-pasts ir epasts ;)
// pirmais nosacījums: ^([a-z]|[0-9]|\.|-|_) paredz,
// lai $email sāktos "^" ar alfabēta simboliem "[a-z]" vai "|" cipariem "[0-9]"
// vai "|" punktu \. vai "|" mīnuszīmes simbolu "-" vai "|" apakšsvītru "_" un šis nosacījums beidzas ar ")"
// bet kopējais lielais eregi nosacijums šajā paternā paredz vēl pāris apakšnosacījumu,
// kuri ietverti "()" :))
// tiekam piemēram līdz $email = "mans-pasts"
// tātad seko otrais kurš, bet pa starpu tiem ir "+@" ,
// kas paredz ka pēc pirmā nosacijuma ir jāseko konkrētam simbolam "@" uhhh ;)
// tiekam piemēram līdz $email = "mans-pasts@"
// un tad tik "ieslēdzas" tas otrais nosacijums: ([a-z]|[0-9]|\.|-|_) , kas paredz to pašu ko pirmais
// simbola "^" nav jo tas tak vienkārši ir loģiski citādi paterns nedarbosies ;)
// tiekam līdz $email = "mans-pasts@mansdomens"
// seko "+" kas paredz, ka aiz pirmajiem diviem nosacījumiem jāseko punktam "\."
// tā tiekam līdz $email = "mans-pasts@mansdomens." un punkts ;)
// seko trešais pedējais apakšnosacījums: ([a-z]|[0-9]){2,3}$ , kurš paredz, ka
// ka te arī jābūt burtiem un vai cipariem "[a-z]|[0-9]", bet ierobežojums ir 2 vai trīs tādi "{2,3}"
// un ne vairāk. Visa šitā jezga beidzas ar "$" simbolu kas paredz ka tiem "{2,3}" ir jābūt $email beigās
// $email = "mans-pasts@mansdomens.gov" ;)
Tā otro rindiņu neanalizēšu tik smalki jo tur ir līdzīgi ;)
// !eregi nosaka kas nedrīkst būt šajā $email
// (@.*@)| $email nedrīkst saturēt (@ jebkaspavidu @)
// (\.\.)| $email nedrīkst saturēt divus punktus
// (@\.)| $email nedrīkst saturēt "@" un punktu pēc tā
// (\.@)| $email nedrīkst saturēt punktu un pēc tā "@"
// (^\.) $email nedrīkst sākties ar punktu
// genoht ;)