elmélet


/reguláris kifejezés[sek]{1,2}el: R, Perl/i


Reguláris kifejezések

Sztringek halmazának meghatározására használt kifejezések.

Használatosak szövegszerkesztőkben, vagy különböző programozási nyelvekben, vagy szöveg manipuláló eszközökben. Kereső funkciót láthatnak el, vagy keresés+manipulációt. Értelmes szövegekre mintákat lehet illeszteni és ezek a minták általánosíthatók. Keresési kifejezéseket használunk, ami minta illesztéseket definiál.


Egyszerű illesztések (literal)

“ez”  “ ez egy jó óra” EGYEZÉS

“g” “ez egy jó óra” EGYEZÉS

“Ez” “ez egy jó óra” NINCS EGYEZÉS


Metakarakterek

speciális karakterek egyedi jelentéssel amik nem használatosak egyszerű illesztésben keresési kifejezésekben.

*.jpg


Escape szekevenciák

amikor egy metakaraktert literal sztringként akarunk használni.

\*.jpg


Cél sztring (karakterlánc): a szöveg amit meg akarunk találni az illesztéssel.


Keresési kifejezés: a minta amit illesztünk a szövegre, hogy megtaláljuk a cél sztringet (karakterláncot).


Metakarakterek

[] példa: [0-9]

^ sztring eleje, vagy negálás

[123]
„ez már a 3. igen jó tanóra” 
EGYEZÉS
tan[éó]
„ez már a 3. igen jó tanóra” 
EGYEZÉS

tan[A-Z] 
„ez már a 3. igen jó tanóra” 
NINCS EGYEZÉS
tan[^A-Z] 
„ez már a 3. igen jó tanóra” 
EGYEZÉS


$ karakterlánc vége

^ karakterlánc eleje

. bármilyen karakter

a$			
„ez már a 3. igen jó tanóra
EGYEZÉS

^ó 	
„ez már a 3.igen jó tanóra”
NINCS EGYEZÉS

m.r			
„ez már a 3. igen jó tanóra”
EGYEZÉS


? a megelőző karakter vagy csoport 0 vagy 1 illeszkedése

* 0 vagy többszöri ismétlése a megelőző karakternek

^tre* EGYEZIK a „tr ee” és „tread” és a „trough” szavakra is

colou?r EGYEZÉS „colour” vagy „color” szavakra

+ 1 vagy több ismétlése a megelőző karakternek

{n} n-szer ismétlődő egyezése az utolsó feltételnek vagy betűnek

[0-9]{3}-[0-9]{4} 
 „312-7878
EGYEZÉS

{n,m} min n-szer, max m-szer ismétlődése...

ba{2,3}
  „baab
EGYEZÉS
ba{2,3}b 
 „baaaab” 
NINCS EGYEZÉS
[a-z]{3,4} 
„anya” vagy „sör” szavakkal 
EGYEZÉS

\(.*g
még tudunk figyelni (pedig már bonyolultabb) 
EGYEZÉS

[xX][0-9a-z]{2} 
„DigExt” NINCS
EGYEZÉS


() csoportosítás

| vagy

gr(e|a)y
„grey” vagy „gray” szavakkal
EGYEZÉS
(W|L)in „a Windows vagy a Linux jobb erre?”
EGYEZÉS


POSIX karakterosztályok

[:digit:] számok 0-9 \d \D [^[:digit:]]

[:alnum:] számok és betűk \w \W [^[:alnum:]]

[:alpha:] csak betűk

[:blank:] szpész és tab

[:xdigit:] hexadecimális karakterek 0-9 a-f A-F

[:punct:] . , " ' ? ! ; : # $ % & ( ) * + - / < > = @ [ ] \ ^ _ { } | ~

[:print:] bármilyen nyomtatható karakter

[:space:] bármilyen szünet karakter (tab, szpész, NL, FF, VT, CR) \s \S [^[:space:]]

[:graph:] bármi ami nem szünet \W

[:upper:] nagybetűk A-Z

[:lower:] kisbetűk a-z

[:cntrl:] NL CR LF TAB VT FF NUL SOH STX EXT EOT ENQ ACK SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC IS1 IS2 IS3 IS4 DEL

\b szóhatár

\B nem szóhatár



Hivatkozások

(\d+)(\w) „123d”

$1=„123” $2=„d”


R-ben \\1 .. \\9

(.)\\1 EGYEZÉS „ja ffa”


Helyettesítések hivatkozásokkal


> sub("(\\d+)(\\w)","\\2_\\1","123d",perl=TRUE)

> d_123

Mit fog adni az alábbi helyettesítés?

sub('([[:digit:]])([a-d])',"\\2 \\1","123d")


> 12d 3



Feladatok

van egy adatsorunk ami ilyesmi sorokból áll:

„2010--01-25 11:45:23 -- s”

„2010-01--25 11:45:23 - m”


Írjatok olyan kereső kifejezést:

1. ami minden dupla kötőjelet szimplára cserél

2. ami csak a dátumformátumban levő dupla kötőjelet cseréli szimplára

3. ami az idő sztringből kitörli a másodpercet

4. ami az idő sztringből kitörli a másodpercet ha a végén nem 's' betű van úgy hogy az alábbi formátumot kapjuk ha pl 's' helyett 'm' betű van: 2010--01-25 11:45m

5. ami megcsinálja a fenti helyettesítést és egyúttal a dupla kötőjelet is kijavítja a dátumban

6. ami az alábbi formátumot eredményezi: 2010-01-25 11:45 - - s

úgy hogy a végén az 's' vagy 'm' betű megmarad és az előtte levő dupla kötőjel közé bekerül egy üres karakter

Laatste wijziging: Thursday, 12 November 2020, 15:24