Your SlideShare is downloading. ×
0
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ál...
Miért érdemes ismerni?
•Egyszerű nyelv, aminek segítségével szövegeket írhatunk le
•Néha egyszerűbb regexp-et használni, m...
Alapok
(?:http://(?:(?:(?:(?:(?:[a-zA-Zd](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?).)*(?:[a-zA-Z](?:(?:[a-zA-Zd]|-)*[a-zA-Zd])?))|(?:(?:d+)(...
Alap használat
illeszkedjen “foo”-ra cseréljük le “bar”-ra
PHP preg_match(‘/foo/’, $myString) preg_replace(‘/foo/’, ‘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
[...
Speciális karakterek
w “word” karakterek (locale függő!)
d számok
t n r tabulátor, sortörés és return karakterek
s whitesp...
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 se...
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 se...
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 $ je...
Ismétlők
• Klasszikus mohók: ?, *, +
• Specifikusak: {1}, {1,}, {1,5}
• ? == {0,1}
• * == {0,}
• + == {1,}
• Nem mohók (lu...
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 se...
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 se...
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 se...
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 se...
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...
Csoportosítás
(…)
Csoportosítja a tartalmat a zárójelekben.
Befolyásolja az alternatívokat és az ismétlőket.
Bekapcsolja a...
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ől...
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ől...
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?)
|
(?:
(...
URL keresése
/
#protokol
(?:[a-z]+://)?
#felhasznalo nev es opcionalis jelszo
(?:S+?(:S+)?@)?
(?:
#IP cim
(?:(?:25[0-5]|2[...
Target nélküli linkek
•Megkeresni az összes olyan <a> elemet egy HTML-
ben, amely <a> elemeknek nincsen target attribútuma...
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 érdem...
Kérdés?
Köszönöm a figyelmet!
Upcoming SlideShare
Loading in...5
×

Reguláris Kifejezések Alapjai

839

Published on

Az alábbi előadás fóliái: http://www.facebook.com/event.php?eid=162998453763080

Published in: Technology, Health & Medicine
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
839
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Reguláris Kifejezések Alapjai"

  1. 1. A reguláris kifejezések alapjai A programozás fekete mágiája
  2. 2. 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.
  3. 3. 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!
  4. 4. Alapok
  5. 5. (?: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$-
  6. 6. 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
  7. 7. Meta karakterek • ^ $ . [ ] | ( ) ? * + { } •Ha ezekre a karakterekre illeszkedni akarunk, akkor escape-eljük őket: “”, “$”
  8. 8. 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
  9. 9. 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
  10. 10. 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/
  11. 11. 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/
  12. 12. 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
  13. 13. Ismétlők • Klasszikus mohók: ?, *, + • Specifikusak: {1}, {1,}, {1,5} • ? == {0,1} • * == {0,} • + == {1,} • Nem mohók (lusták): ??, *?, +?, {5,7}?
  14. 14. 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/
  15. 15. 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/
  16. 16. 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/
  17. 17. 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/
  18. 18. 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.
  19. 19. 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”
  20. 20. Csoportosítás (d+(.d+)) $1 $2
  21. 21. 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.
  22. 22. 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.
  23. 23. Csoportosítás (?P<name>) Nevesített hivatkozások a csoportokban (?=name) Nevesített csoportra hivatkozás
  24. 24. Előre-/hátratekintés • Null szélességű csoportok pozitív negatív előre (?=...) (?!...) hátra (?<=...) (?<!...)
  25. 25. Példa /.*?@twistedtribe/ /.*?(?=@twitedtribe)/ adam.brunner@twistedtribe.com adam.brunner@twistedtribe.com
  26. 26. Feltételek (?(feltetel)igaz-minta|hamis-minta) vagy (?(feltetel)igaz-minta)
  27. 27. Példa /(<)?[a-z]+(?(1)>)/ /^(?(?=b)bar|f)/ <tag> <foo <bar attr=“”> foo bar baz
  28. 28. Példák nem feltétlenül életszerűek
  29. 29. IP cím ellenőrzése
  30. 30. IP cím ellenőrzése /d{1,3}.d{1,3}.d{1,3}.d{1,3}/ 999.999.999.999
  31. 31. IP cím ellenőrzése /(d{1,3}.){3}d{1,3}/ 999.999.999.999
  32. 32. IP cím ellenőrzése 0-9 10-99 100-199 200-249 250-255
  33. 33. IP cím ellenőrzése d 10-99 100-199 200-249 250-255
  34. 34. IP cím ellenőrzése d d{2} 100-199 200-249 250-255
  35. 35. IP cím ellenőrzése d d{2} 1d{2} 200-249 250-255
  36. 36. IP cím ellenőrzése d d{2} 1d{2} 2[0-4]d 250-255
  37. 37. IP cím ellenőrzése d d{2} 1d{2} 2[0-4]d 25[0-5]
  38. 38. 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
  39. 39. 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
  40. 40. 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
  41. 41. 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
  42. 42. 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
  43. 43. 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
  44. 44. 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
  45. 45. URL keresése
  46. 46. 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
  47. 47. 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
  48. 48. Target nélküli linkek •Megkeresni az összes olyan <a> elemet egy HTML- ben, amely <a> elemeknek nincsen target attribútuma meghatározva.
  49. 49. Target nélküli linkek / <a (?: s+ [a-z]+(?<!target) (?:s*=s*('|").*?1)? )+ > /isx
  50. 50. 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()
  51. 51. Kérdés?
  52. 52. Köszönöm a figyelmet!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×