ugrás a tartalomhoz

Reguláris kifejezés

Anonymous · 2005. Már. 22. (K), 22.20
Sziasztok,

a preg_match függvényt próbálgatnám, pl. a következő karakterláncból:

"ezegysövegblabla azonosito1='22' szovegtobabbbbfbf"

hogyan lehetne kinyerni az azonositó értékét. Ezzel próbálkoztam:

preg_match ("/azonosito=[']{0,1}([']+)", $valtozo, $talaltok);

Tud ebben valaki segiteni? Előre is köszönöm.
 
1

próbáld ki ezt:

VBala · 2005. Már. 22. (K), 23.09
preg_match("/azonosito\d*='(.*)'/",$valtozo,$talalatok);
2

Ez müködik köszi én

Anonymous · 2005. Már. 22. (K), 23.19
Ez müködik köszi én teljesen rossz irányba indultam...

preg_match("/parent\d*='(.*)'/",$row[2],$matches);

és ezzel azt is meg lehetne oldani, hogy figyelje pl. azt, hogy a szám esetleg nincs aposztrófban, vagy ha macskakörömben van, tehát valtozo=55 az pl. hogy lenne? Mi változna?

Hol lehet erről magyarul olvasni? Ezeken a cimeken néztem eddig:

http://www.szabilinux.hu/linux_doksi/node603.htm
http://mediacenter.hu/help/php/ref.pcre.html

Bocs a sok kérdezésért.
3

[q]és ezzel azt is meg

gerzson · 2005. Már. 23. (Sze), 00.13
és ezzel azt is meg lehetne oldani, hogy figyelje pl. azt, hogy a szám esetleg nincs aposztrófban, vagy ha macskakörömben van, tehát valtozo=55 az pl. hogy lenne? Mi változna?

/parent\d* = (['"])? ([^'"]*) (?(1) \1)/
lásd feltételes gyűjtőminták

A PHP kézikönyvben van magyarra fordított leírás. Nem a legjobb kezdőknek, de több a semminél. Ha a fordítás most nem elérhető, az majd javítva lesz lassankint.

ui.: kísérd figyelemmel a weblaboron a készülő-bővülő regex cikksorozatot is!
4

Szia,

Anonymous · 2005. Már. 23. (Sze), 00.27
Szia,

köszi szépen, átolvastam és a cikksorozatot is átolvasom, közben ezt csináltam:

preg_match("/parent\d*=[\"'](.*)[\"']/",$valtozo,$ebbe);

ez visszaadja a macskakörömbe zárt dolgokat is, de ahol nincs se macsakaköröm se aposztróf ott nem jó. Amit te írtál:

/parent\d* = (['"])? ([^'"]*) (?(1) \1)/

preg_match("/parent\d* = (['"])? ([^'"]*) (?(1) \1)/",$row[2],$matches);

az nem akar müködni sajnos.

Kösz mégegyszer.
5

lemaradt egy x a

gerzson · 2005. Már. 23. (Sze), 01.03
lemaradt egy x a végéről:

/parent\d*=(['\"])? (?P<id>[^'\"]*) (?(1) ['\"])/x

plusz a \1 repjeles hivatkozást \\1-ként kell írni macskakörmök ("") között. Így már jobbnak kell lennie (itt most aposztrófok között, mert azt én jobb szeretem):
<?php
preg_match('/parent\d*=([\'"])? (?P<id>[^\'"]*) (?(1) \1)/x', 
           $row[2], $matches);

print_r($matches);
Ennek a megoldásnak annyi az előnye, h. megköveteli, h. ugyanazzal a karakterrel legyen lezárva az arttribútum, mint ami előtte szerepelt, tehát nem lehet keverni a '-t és "-t előtte és utána.
A print_r() listában látod majd, h. mi az a titokzatos jelölés a regex közepén ;), bár ez elhagyható.
6

Szia,

Anonymous · 2005. Már. 23. (Sze), 04.49
Szia,
ez müködik szépen, bár a közepét nem értem(még), de utánaolvasok, jó lesz tanulásra. Köszi szépen a segitséget!
7

nevesített gyűjtés

gerzson · 2005. Már. 23. (Sze), 08.29
(?P<id> ...) ugyanazt tudja, mint a sima (...), de ennek használatával nem csak számmal tudsz hivatkozni a begyűjtött részmintára, hanem a <> között megadott névvel is (az index szerinti elérés továbbra is megmarad).

Ez azért jó, mert ha megváltozik a ()-k sorrendje vagy száma, akkor sem kell újraírni/nézni az alkalmazást, ahol a $matches tömböt használod. Ebben a mintában is ez volt a helyzet, mert ahhoz, h. nagyon jól működjön kénytelenek voltunk a paraméter gyűjtése előtt új gyűjtő zárójelet használni, amitől az eredetileg 1. indexű elem a 2. helyre csúszott.
<?php
preg_match('/([\'"])? (?P<quoted>[\'"]) (?(1) \1)/x',
           $row[2], $matches);
// a 2. gyűjtő mintát neveztük el "quoted"-nak
assert ('$matches["quoted"] == $matches[2]');
$quoted = $matches['quoted'];
ui.: ezt a funkciót még nem találod meg a PHP kézikönyvben, de utána nézhetsz a legfrissebb PCRE könyvtár dokumentációjában, vagy a PHP forrásokhoz csatolt PCRE (ext/pcre/pcrelib/doc/pcre.txt) verzió mellett található hasonló nevű fájlban.
8

Szia,

Anonymous · 2005. Már. 23. (Sze), 16.40
Szia,
nagyon köszi a választ és a példákat, ennek jobban utána kell járnom, köszi a hivatkozásokat is - sokat segitettél!