Portál AbcLinuxu, 6. května 2025 06:11

Dotaz: [PHP] Regexp na volané metody a proměnné objektů

28.11.2010 16:07 sidik
[PHP] Regexp na volané metody a proměnné objektů
Přečteno: 234×
Odpovědět | Admin
Zdravíčko,

ve firemním systému máme editor šablon a zdrojáků (pro případ, že je rychle nezbytná nějaká jednoduchá úprava). Teď jsem dostal za úkol přidat podporu pro dokumentační odkazy. A řeším problém. Potřebuji sestavit regexp tak, abych jím pojal všechna volání metod a proměnných objektů. Základ byl jednoduchý, dohledat $objekt->metoda() není takový problém. Jenže ono to může jít dál, třeba při přetěžování: $objekt->metodaA()->metodaB()->metodaC()....

A já potřebuju zachytit i tohle a jednotlivé metody pak předat dál jako parametry pro zpracování. Rád bych to udělal jedním regexpem pokud možno. Tedy abych ve výsledku dostal parametry: $objekt, metodaA(), metodaB()... Nechce se mi zbytečně psát několik pravidel, protože nikdy nevím, kdo kde použije nějakou bláznivou konstrukci.

Může mi někdo poradit s daným regexpem, případně lepším řešením?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.11.2010 17:56 12345 | skóre: 41 | blog:
Rozbalit Rozbalit vše Re: [PHP] Regexp na volané metody a proměnné objektů
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zdá se mi jednodušší matchnout celý řetězec volání a jednotlivé elementy si pak rozebrat třeba pomocí explode(). Například tohle (pozor, syntax highlight pro proměnnou $str je špatně)
<?php
$str = '
$objekt->metodaA()->metodaB()
       ->metodaC();
$objekt->metodaX();
$objekt = null;
';

preg_match_all('|\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(\s*->\s*[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\(\))+|', $str, $matches);

foreach ($matches[0] as $match) {
	$params = array_map('trim', explode('->', $match));
	var_dump($params);
}
má následující výstup:
array
  0 => string '$objekt' (length=7)
  1 => string 'metodaA()' (length=9)
  2 => string 'metodaB()' (length=9)
  3 => string 'metodaC()' (length=9)

array
  0 => string '$objekt' (length=7)
  1 => string 'metodaX()' (length=9)
Ty šílené regexpy na jméno proměnné a metody jsou z manuálu PHP. Zjednodušeně celý regexp vypadá takto:
'|\$promenna(\s*->\s*metoda\(\))+|
28.11.2010 17:57 12345 | skóre: 41 | blog:
Rozbalit Rozbalit vše Re: [PHP] Regexp na volané metody a proměnné objektů
Oprava: Zjednodušeně celý regexp vypadá takto:
|\$promenna(\s*->\s*metoda\(\))+|
28.11.2010 19:25 sidik
Rozbalit Rozbalit vše Re: [PHP] Regexp na volané metody a proměnné objektů
Skvělé, díky.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.