SlideShare ist ein Scribd-Unternehmen logo
1 von 52
A reguláris kifejezések alapjai
A programozás fekete mágiája
Mi is az a reguláris kifejezés?
A reguláris kifejezés (angolul regular expression) egy
olyan, bizonyos szintaktikai szabályok szerint leírt string,
amivel meghatározható stringek egy halmaza.
Nevének rövidítésére gyakran a regexp vagy regex
kifejezés használatos.
Miért érdemes ismerni?
•Egyszerű nyelv, aminek segítségével szövegeket írhatunk le
•Néha egyszerűbb regexp-et használni, mint más metódusokat
•Nagyon gyors tud lenni
•Te lehetsz az, aki a többi programozót elriasztod, nem ők téged!
Alapok
(?:http://(?:(?:(?:(?:(?:[a-zA-Zd](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-Z](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?))|(?:(?:d+)(?:.(?:d+)){3}))(?::(?:d+))?)(?:/(?:(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-
fA-Fd]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[;:@&=])*))*)(?:?(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[;:@&=])*))?)?)|(?:ftp://(?:(?:(?:(?:(?:[a-zA-Zd$-
_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Zd](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-Z](?:(?:[a-zA-Zd]|-
)*[a-zA-Zd])?))|(?:(?:d+)(?:.(?:d+)){3}))(?::(?:d+))?))(?:/(?:(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-
Fd]{2}))|[?:@&=])*))*)(?:;type=[AIDaid])?)?)|(?:news:(?:(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[;/?:&=])+@(?:(?:(?:(?:[a-zA-Zd](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-Z](?:(?:[a-
zA-Zd]|-)*[a-zA-Zd])?))|(?:(?:d+)(?:.(?:d+)){3})))|(?:[a-zA-Z](?:[a-zA-Zd]|[_.+-])*)|*))|(?:nntp://(?:(?:(?:(?:(?:[a-zA-Zd](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-Z](?:(?:[a-zA-Zd]|-)*[a-zA-
Zd])?))|(?:(?:d+)(?:.(?:d+)){3}))(?::(?:d+))?)/(?:[a-zA-Z](?:[a-zA-Zd]|[_.+-])*)(?:/(?:d+))?)|(?:telnet://(?:(?:(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Zd$-
_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Zd](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-Z](?:(?:[a-zA-Zd]|-)*[a-zA-
Zd])?))|(?:(?:d+)(?:.(?:d+)){3}))(?::(?:d+))?))/?)|(?:gopher://(?:(?:(?:(?:(?:[a-zA-Zd](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-Z](?:(?:[a-zA-Zd]|-)*[a-zA-
Zd])?))|(?:(?:d+)(?:.(?:d+)){3}))(?::(?:d+))?)(?:/(?:[a-zA-Zd$-_.+!*'(),;/?:@&=]|(?:%[a-fA-Fd]{2}))(?:(?:(?:[a-zA-Zd$-_.+!*'(),;/?:@&=]|(?:%[a-fA-Fd]{2}))*)(?:%09(?:(?:(?:[a-zA-Zd$-
_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[;:@&=])*)(?:%09(?:(?:[a-zA-Zd$-_.+!*'(),;/?:@&=]|(?:%[a-fA-Fd]{2}))*))?)?)?)?)|(?:wais://(?:(?:(?:(?:(?:[a-zA-Zd](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-
Z](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?))|(?:(?:d+)(?:.(?:d+)){3}))(?::(?:d+))?)/(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))*)(?:(?:/(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))*)/(?:(?:[a-zA-Zd$-
_.+!*'(),]|(?:%[a-fA-Fd]{2}))*))|?(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[;:@&=])*))?)|(?:mailto:(?:(?:[a-zA-Zd$-_.+!*'(),;/?:@&=]|(?:%[a-fA-Fd]{2}))+))|(?:file://(?:(?:(?:(?:(?:[a-zA-
Zd](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-Z](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?))|(?:(?:d+)(?:.(?:d+)){3}))|localhost)?/(?:(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-
Fd]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[?:@&=])*))*))|(?:prospero://(?:(?:(?:(?:(?:[a-zA-Zd](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-Z](?:(?:[a-zA-Zd]|-)*[a-
zA-Zd])?))|(?:(?:d+)(?:.(?:d+)){3}))(?::(?:d+))?)/(?:(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-
Fd]{2}))|[?:@&=])*))*)(?:(?:;(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[?:@&])*)=(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[?:@&])*)))*)|(?:ldap://(?:(?:(?:(?:(?:(?:[a-zA-Zd](?:(?:[a-
zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-Z](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?))|(?:(?:d+)(?:.(?:d+)){3}))(?::(?:d+))?))?/(?:(?:(?:(?:(?:(?:(?:[a-zA-Zd]|%(?:3d|[46][a-fA-
Fd]|[57][Aad]))|(?:%20))+|(?:OID|oid).(?:(?:d+)(?:.(?:d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-
Fd]{2}))*))(?:(?:(?:%0[Aa])?(?:%20)*)+(?:(?:%0[Aa])?(?:%20)*)(?:(?:(?:(?:(?:[a-zA-Zd]|%(?:3d|[46][a-fA-
Fd]|[57][Aad]))|(?:%20))+|(?:OID|oid).(?:(?:d+)(?:.(?:d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-
Fd]{2}))*)))*)(?:(?:(?:(?:%0[Aa])?(?:%20)*)(?:[;,])(?:(?:%0[Aa])?(?:%20)*))(?:(?:(?:(?:(?:(?:[a-zA-Zd]|%(?:3d|[46][a-fA-
Fd]|[57][Aad]))|(?:%20))+|(?:OID|oid).(?:(?:d+)(?:.(?:d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-
Fd]{2}))*))(?:(?:(?:%0[Aa])?(?:%20)*)+(?:(?:%0[Aa])?(?:%20)*)(?:(?:(?:(?:(?:[a-zA-Zd]|%(?:3d|[46][a-fA-
Fd]|[57][Aad]))|(?:%20))+|(?:OID|oid).(?:(?:d+)(?:.(?:d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-
Fd]{2}))*)))*))*(?:(?:(?:%0[Aa])?(?:%20)*)(?:[;,])(?:(?:%0[Aa])?(?:%20)*))?)(?:?(?:(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))+)(?:,(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-
Fd]{2}))+))*)?)(?:?(?:base|one|sub)(?:?(?:((?:[a-zA-Zd$-_.+!*'(),;/?:@&=]|(?:%[a-fA-Fd]{2}))+)))?)?)?)|(?:(?:z39.50[rs])://(?:(?:(?:(?:(?:[a-zA-Zd](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-
Z](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?))|(?:(?:d+)(?:.(?:d+)){3}))(?::(?:d+))?)(?:/(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))+)(?:+(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))+))*(?:?(?:(?:[a-
zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))+))?)?(?:;esn=(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))+))?(?:;rs=(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))+)(?:+(?:(?:[a-zA-Zd$-
_.+!*'(),]|(?:%[a-fA-Fd]{2}))+))*)?))|(?:cid:(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[;?:@&=])*))|(?:mid:(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[;?:@&=])*)(?:/(?:(?:(?:[a-zA-
Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[;?:@&=])*))?)|(?:vemmi://(?:(?:(?:(?:(?:[a-zA-Zd](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-Z](?:(?:[a-zA-Zd]|-)*[a-zA-
Zd])?))|(?:(?:d+)(?:.(?:d+)){3}))(?::(?:d+))?)(?:/(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[/?:@&=])*)(?:(?:;(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[/?:@&])*)=(?:(?:(?:[a-zA-
Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[/?:@&])*))*))?)|(?:imap://(?:(?:(?:(?:(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[&=~])+)(?:(?:;[Aa][Uu][Tt][Hh]=(?:*|(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-
fA-Fd]{2}))|[&=~])+))))?)|(?:(?:;[Aa][Uu][Tt][Hh]=(?:*|(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[&=~])+)))(?:(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-
Fd]{2}))|[&=~])+))?))@)?(?:(?:(?:(?:(?:[a-zA-Zd](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-Z](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?))|(?:(?:d+)(?:.(?:d+)){3}))(?::(?:d+))?))/(?:(?:(?:(?:(?:(?:[a-zA-
Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[&=~:@/])+)?;[Tt][Yy][Pp][Ee]=(?:[Ll](?:[Ii][Ss][Tt]|[Ss][Uu][Bb])))|(?:(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[&=~:@/])+)(?:?(?:(?:(?:[a-zA-Zd$-
_.+!*'(),]|(?:%[a-fA-Fd]{2}))|[&=~:@/])+))?(?:(?:;[Uu][Ii][Dd][Vv][Aa][Ll][Ii][Dd][Ii][Tt][Yy]=(?:[1-9]d*)))?)|(?:(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-
Fd]{2}))|[&=~:@/])+)(?:(?:;[Uu][Ii][Dd][Vv][Aa][Ll][Ii][Dd][Ii][Tt][Yy]=(?:[1-9]d*)))?(?:/;[Uu][Ii][Dd]=(?:[1-9]d*))(?:(?:/;[Ss][Ee][Cc][Tt][Ii][Oo][Nn]=(?:(?:(?:[a-zA-Zd$-_.+!*'(),]|(?:%[a-fA-
Fd]{2}))|[&=~:@/])+)))?)))?)|(?:nfs:(?:(?://(?:(?:(?:(?:(?:[a-zA-Zd](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-Z](?:(?:[a-zA-Zd]|-)*[a-zA-
Zd])?))|(?:(?:d+)(?:.(?:d+)){3}))(?::(?:d+))?)(?:(?:/(?:(?:(?:(?:(?:[a-zA-Zd$-_.!~*'(),])|(?:%[a-fA-Fd]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Zd$-_.!~*'(),])|(?:%[a-fA-
Fd]{2})|[:@&=+])*))*)?)))?)|(?:/(?:(?:(?:(?:(?:[a-zA-Zd$-_.!~*'(),])|(?:%[a-fA-Fd]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Zd$-_.!~*'(),])|(?:%[a-fA-Fd]{2})|[:@&=+])*))*)?))|(?:(?:(?:(?:(?:[a-zA-Zd$-
Alap használat
illeszkedjen “foo”-ra cseréljük le “bar”-ra
PHP preg_match(‘/foo/’, $myString) preg_replace(‘/foo/’, ‘bar’, $myString)
JavaScript /foo/.test(myString) myString.replace(/foo/, ‘bar’);
Perl /foo/ s/foo/bar/
Vi /foo/ :s/foo/bar/
TextMate ⌘-F, Find: foo ⌘-F Find: foo, Replace: bar
Meta karakterek
• ^ $ . [ ] | ( ) ? * + { }
•Ha ezekre a karakterekre illeszkedni akarunk, akkor escape-eljük
őket: “”, “$”
Karakter osztályok
. (pont) Minden karakter
[abc] a, b vagy c karakter
[a-c] Ugyanaz, mint a fenti, egy karakter halmaza
[^abc] Akármilyen karakter, kivéve a, b vagy c
[a-z&&[^aeiou]] Akármelyik betű a-tól z-ig, kivéve a magánhangzók
[a-Z] HIBÁS! Érvénytelen karakterosztály
Speciális karakterek
w “word” karakterek (locale függő!)
d számok
t n r tabulátor, sortörés és return karakterek
s whitespace = [tnvfr ]
b szó határoló
1 2 … 9
W D és a többi pont az ellenkezője a kisbetűsnek
Példa
This reveals that plain text is in fact the technical user's
way to regard a file or a sequence of bytes. In this sense,
there is no plain text.
/b[w&&[^aA]]+b/
/W{2,}w+b/
Példa
This reveals that plain text is in fact the technical user's
way to regard a file or a sequence of bytes. In this sense,
there is no plain text.
/b[w&&[^aA]]+b/
/W{2,}w+b/
Alapok
•A a string elejét
•Z a string vége, vagy sortörés előtti pozíció
•z a string vége
•A ^ jelöli a sor elejét
•A $ jelöli a sor végét
Ismétlők
• Klasszikus mohók: ?, *, +
• Specifikusak: {1}, {1,}, {1,5}
• ? == {0,1}
• * == {0,}
• + == {1,}
• Nem mohók (lusták): ??, *?, +?, {5,7}?
Példa
This reveals that plain text is in fact the technical user's
way to regard a file or a sequence of bytes. In this sense,
there is no plain text.
/reveal(.*)plain/
/reveal(.*?)plain/
/t.{2,3}t/
Példa
This reveals that plain text is in fact the technical user's
way to regard a file or a sequence of bytes. In this sense,
there is no plain text.
/reveal(.*)plain/
/reveal(.*?)plain/
/t.{2,3}t/
Példa
This reveals that plain text is in fact the technical user's
way to regard a file or a sequence of bytes. In this sense,
there is no plain text.
/reveal(.*)plain/
/reveal(.*?)plain/
/t.{2,3}t/
Példa
This reveals that plain text is in fact the technical user's
way to regard a file or a sequence of bytes. In this sense,
there is no plain text.
/reveal(.*)plain/
/reveal(.*?)plain/
/t.{2,3}t/
Alternatívok
a|b “a” vagy “b”
foo|bar “foo” vagy “bar”
foo|bar|baz “foo”, “bar” vagy “baz”
Egy kifejezésben a “|” a vagyot jelenti. Teljes kifejezéseket lehet rakni a két
oldalára, mindkettő illeszkedhet.
Példa:
/alma|mogyorok?/ illeszkedhet az “alma”, “mogyoro” és “mogyorok” szavakra.
Csoportosítás
(…)
Csoportosítja a tartalmat a zárójelekben.
Befolyásolja az alternatívokat és az ismétlőket.
Bekapcsolja az illeszkedő tartalom mentését.
be|kikapcsol “be” vagy “kikapcsol”
(be|ki)kapcsol “bekapcsol” vagy “kikapcsol”
(ha)+ illeszkedik a “ha”, “haha”, “hahaha”, … szavakra
Greg(ory)? “Greg” vagy “Gregory”
Csoportosítás
(d+(.d+))
$1
$2
Csoportosítás
([‘“]).+?1
…oldalukon kifúrt gyűrűk, egyszerű “szelepek”
nyitották-zárták attól függően…így a fát és a belőle
készült auloszt is gyakran ‘líbiainak’ nevezték.
Csoportosítás
([“‘]).+?1
…oldalukon kifúrt gyűrűk, egyszerű “szelepek“
nyitották-zárták attól függően…így a fát és a belőle
készült auloszt is gyakran ‘líbiainak‘ nevezték.
Csoportosítás
(?P<name>) Nevesített hivatkozások a csoportokban
(?=name) Nevesített csoportra hivatkozás
Előre-/hátratekintés
• Null szélességű csoportok
pozitív negatív
előre (?=...) (?!...)
hátra (?<=...) (?<!...)
Példa
/.*?@twistedtribe/
/.*?(?=@twitedtribe)/
adam.brunner@twistedtribe.com
adam.brunner@twistedtribe.com
Feltételek
(?(feltetel)igaz-minta|hamis-minta)
vagy
(?(feltetel)igaz-minta)
Példa
/(<)?[a-z]+(?(1)>)/
/^(?(?=b)bar|f)/
<tag> <foo <bar attr=“”>
foo
bar
baz
Példák
nem feltétlenül életszerűek
IP cím ellenőrzése
IP cím ellenőrzése
/d{1,3}.d{1,3}.d{1,3}.d{1,3}/
999.999.999.999
IP cím ellenőrzése
/(d{1,3}.){3}d{1,3}/
999.999.999.999
IP cím ellenőrzése
0-9
10-99
100-199
200-249
250-255
IP cím ellenőrzése
d
10-99
100-199
200-249
250-255
IP cím ellenőrzése
d
d{2}
100-199
200-249
250-255
IP cím ellenőrzése
d
d{2}
1d{2}
200-249
250-255
IP cím ellenőrzése
d
d{2}
1d{2}
2[0-4]d
250-255
IP cím ellenőrzése
d
d{2}
1d{2}
2[0-4]d
25[0-5]
IP cím ellenőrzése
/
(
(d|d{2}|1d{2}|2[0-4]d|25[0-5])
.
){3}
(d|d{2}|1d{2}|2[0-4]d|25[0-5])
/x
255.255.255.255
IP cím ellenőrzése
/
(
(d|d{2}|1d{2}|2[0-4]d|25[0-5])
.
){3}
(d|d{2}|1d{2}|2[0-4]d|25[0-5])
/x
255.255.255.255
IP cím ellenőrzése
/
(
(d?d|1d{2}|2[0-4]d|25[0-5])
.
){3}
(d?d|1d{2}|2[0-4]d|25[0-5])
/x
255.255.255.255
IP cím ellenőrzése
/
(
(d{1,2}|1d{2}|2[0-4]d|25[0-5])
.
){3}
(d{1,2}|1d{2}|2[0-4]d|25[0-5])
/x
255.255.255.255
IP cím ellenőrzése
/
(
(d{1,2}|1d{2}|2[0-4]d|25[0-5])
.
){3}
(d{1,2}|1d{2}|2[0-4]d|25[0-5])
/x
255.255.255.255
IP cím ellenőrzése
/
(
(1?d{1,2}|2[0-4]d|25[0-5])
.
){3}
(1?d{1,2}|2[0-4]d|25[0-5])
/x
255.255.255.255
IP cím ellenőrzése
/
(
(1?d{1,2}|2[0-4]d|25[0-5])
.
){3}
(1?d{1,2}|2[0-4]d|25[0-5])
/x
255.255.255.255
URL keresése
URL keresése
/
(?:[a-z]+://)?
(?:S+?(:S+)?@)?
(?:
(?:(?:25[0-5]|2[0-4]d|[01]?dd?).){3}(?:25[0-5]|2[0-4]d|[01]?dd?)
|
(?:
(?:[a-z0-9][a-z0-9-]*[a-z0-9].)+
(?:[a-z]{2,6})
)
)
(?::(?:[1-9]|[1-5]?d{2,4}|6[0-4]d{3}|65[0-4]d{2}|655[0-5]d|6556[0-5]))?
(?:
(?:/|?)
.*?
)?
(?=s|<|$)
/ix
URL keresése
/
#protokol
(?:[a-z]+://)?
#felhasznalo nev es opcionalis jelszo
(?:S+?(:S+)?@)?
(?:
#IP cim
(?:(?:25[0-5]|2[0-4]d|[01]?dd?).){3}(?:25[0-5]|2[0-4]d|[01]?dd?)
|
#vagy domain
(?:
(?:[a-z0-9][a-z0-9-]*[a-z0-9].)+
#TLD
(?:[a-z]{2,6})
)
)
#port
(?::(?:[1-9]|[1-5]?d{2,4}|6[0-4]d{3}|65[0-4]d{2}|655[0-5]d|6556[0-5]))?
#path es query string
(?:
(?:/|?)
.*?
)?
(?=s|$)
/ix
Target nélküli linkek
•Megkeresni az összes olyan <a> elemet egy HTML-
ben, amely <a> elemeknek nincsen target attribútuma
meghatározva.
Target nélküli linkek
/
<a
(?:
s+
[a-z]+(?<!target)
(?:s*=s*('|").*?1)?
)+
>
/isx
A spanyol viasz
Van jónéhány dolog, amire egyszerűen nem érdemes és nem is
lehet használni a regexp-et, ezért nem is érdemes!
•HTML validálás és feldolgozás – DOM kiterjesztés PHP alatt
•Form input-ok validálása – PHP Data Filtering
•Dátum validálás – strtotime()
•Amikor egy egyszerű szöveget keresünk – strpos(), str_replace()
Kérdés?
Köszönöm a figyelmet!

Weitere ähnliche Inhalte

Andere mochten auch

6 Development Tools we Love for Mac
6 Development Tools we Love for Mac6 Development Tools we Love for Mac
6 Development Tools we Love for MacCopperEgg
 
Getting your professional message across
Getting your professional message acrossGetting your professional message across
Getting your professional message acrossRhonda Bracey
 
нгасу сибстрин
нгасу сибстриннгасу сибстрин
нгасу сибстринBDA
 
Smarsh Email Encryption - Presented by Atidan
Smarsh Email Encryption - Presented by AtidanSmarsh Email Encryption - Presented by Atidan
Smarsh Email Encryption - Presented by AtidanDavid J Rosenthal
 
March 2015 newsletter
March 2015  newsletterMarch 2015  newsletter
March 2015 newsletterMrsHanes
 
Boletin eures abril 2012
Boletin eures abril 2012Boletin eures abril 2012
Boletin eures abril 2012formaciopuig
 
Colonies of the new world
Colonies of the new worldColonies of the new world
Colonies of the new worldEmmersonMae
 
April newsletter 2015
April newsletter 2015April newsletter 2015
April newsletter 2015MrsHanes
 
Shakespeare ankara conf nov 2012
Shakespeare ankara conf nov 2012Shakespeare ankara conf nov 2012
Shakespeare ankara conf nov 2012safirk
 
커피값이 밥값이다(최연정)
커피값이 밥값이다(최연정)커피값이 밥값이다(최연정)
커피값이 밥값이다(최연정)Eun-su Jang
 
Bomba de vacío casera
Bomba de vacío casera Bomba de vacío casera
Bomba de vacío casera I.S.F.T N°118
 

Andere mochten auch (19)

Laurea UAS @SmartLab13 Conference in Lecce 27092013
Laurea UAS @SmartLab13 Conference in Lecce 27092013Laurea UAS @SmartLab13 Conference in Lecce 27092013
Laurea UAS @SmartLab13 Conference in Lecce 27092013
 
6 Development Tools we Love for Mac
6 Development Tools we Love for Mac6 Development Tools we Love for Mac
6 Development Tools we Love for Mac
 
Getting your professional message across
Getting your professional message acrossGetting your professional message across
Getting your professional message across
 
mekatronika
mekatronikamekatronika
mekatronika
 
нгасу сибстрин
нгасу сибстриннгасу сибстрин
нгасу сибстрин
 
Apr. rema
Apr. remaApr. rema
Apr. rema
 
Smarsh Email Encryption - Presented by Atidan
Smarsh Email Encryption - Presented by AtidanSmarsh Email Encryption - Presented by Atidan
Smarsh Email Encryption - Presented by Atidan
 
March 2015 newsletter
March 2015  newsletterMarch 2015  newsletter
March 2015 newsletter
 
Svenska 8 c vecka 42
Svenska 8 c vecka 42Svenska 8 c vecka 42
Svenska 8 c vecka 42
 
Cours 7
Cours 7Cours 7
Cours 7
 
Boletin eures abril 2012
Boletin eures abril 2012Boletin eures abril 2012
Boletin eures abril 2012
 
C&C Report
C&C ReportC&C Report
C&C Report
 
Мониторинг НОСОУН 06.02.2015
Мониторинг НОСОУН 06.02.2015 Мониторинг НОСОУН 06.02.2015
Мониторинг НОСОУН 06.02.2015
 
Colonies of the new world
Colonies of the new worldColonies of the new world
Colonies of the new world
 
April newsletter 2015
April newsletter 2015April newsletter 2015
April newsletter 2015
 
Shakespeare ankara conf nov 2012
Shakespeare ankara conf nov 2012Shakespeare ankara conf nov 2012
Shakespeare ankara conf nov 2012
 
커피값이 밥값이다(최연정)
커피값이 밥값이다(최연정)커피값이 밥값이다(최연정)
커피값이 밥값이다(최연정)
 
Ppt gavillan marzo 2014
Ppt gavillan marzo 2014Ppt gavillan marzo 2014
Ppt gavillan marzo 2014
 
Bomba de vacío casera
Bomba de vacío casera Bomba de vacío casera
Bomba de vacío casera
 

Reguláris Kifejezések Alapjai