Portál AbcLinuxu, 12. května 2025 09:06

Dotaz: regulární výrazy - PHP

23.10.2010 20:50 sranda_zitra
regulární výrazy - PHP
Přečteno: 395×
Odpovědět | Admin
Dobrý večer,
Pokouším se o následující:

Mám soubor.txt, který obsahuje tisíce slov, kde tato slova mohou být oddělena různým počtem mezer. Nicméně v souboru je dvojice slov, která jsou jedinečná a pomocí PHP a reg. výrazů bych potřeboval dostat vše mezi těmito jedinečnými dvojicemi slov.

Napadlo mě použít preg_split();, ale tam si nejsem jistý zápisem regulárních výrazů (zdá se, že to co funguje u ereg(), zde nefunguje). Neřešil jste už někdy někdo něco podobného? moje preg_split() zatím vypadá takto:
preg_split("%^.*jedinečný řetězec 1.*jedinečný řetězec 2$%", $result);
V $result je načtený celý text. Počítám, že u preg_split() se používají jíné patterns než u ereg(), proto si můj preg_split() ani neškrtne. Potřebuji takto zpracovat desítky soubor.txt...Jinak bych to samozrejmě označil a kopíroval. Ocením jakékoliv nápady. Díky.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.10.2010 21:22 chrono
Rozbalit Rozbalit vše Re: regulární výrazy - PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nechce sa mi pozerať, ale predpokladám, že preg_split sa používa na niečo iné. V tvojom prípade by som sa asi pozrel na preg_match prípadne preg_match_all (a na modifikátory ungreedy a dotall).
23.10.2010 21:26 sranda_zitra
Rozbalit Rozbalit vše Re: regulární výrazy - PHP
Neee, preg_match urcite ne.... potrebuju ziskat ten substring, ktery je mezi danymi jedinecnymi dvojicemi slov.. ja jsem se asi nejprve spatne vyjadril...
23.10.2010 21:52 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: regulární výrazy - PHP
Píšete, že chcete najít vše mezi nějakou dvojicí slov. Pak se opravíte s tím, že potřebujete získat vše mezi nějakou dvojicí slov. Odmítáte preg_match a chcete použít preg_split, přestože nechcete rozdělovat řetězec, ale chcete najít vše mezi nějakou dvojicí slov. Prosím na kolenou, použijte preg_match :)
$ php -r 'preg_match("/foo +(.*) +bar/", "aa foo bb bar ccc", $matches); print_r($matches);'
Array
(
    [0] => foo bb bar
    [1] => bb
)
Všimněte si, že $matches[1] je to, co hledáte.

Jo a samozřejmě, ke všem zmíněným funkcím a i k různým formám regulárních výrazů v PHP existuje dokumentace. Najdete ji na webu.
23.10.2010 23:44 sranda_zitra
Rozbalit Rozbalit vše Re: regulární výrazy - PHP
super, diky... vypada to, ze dnes nemam svuj nejlepsi den...
24.10.2010 00:49 NeoV | skóre: 23
Rozbalit Rozbalit vše Re: regulární výrazy - PHP
prip. takto ak mas v danom texte viac krat danu dvojicu slov:

C:\>php -r "preg_match_all(\"/foo\s+(.*?)\s+bar/\", \"aa foo bb bar ccc foo druhy bar\", $matches); print_r($matches);"
Array
(
    [0] => Array
        (
            [0] => foo bb bar
            [1] => foo druhy bar
        )

    [1] => Array
        (
            [0] => bb
            [1] => druhy
        )

)
25.10.2010 16:05 soyo
Rozbalit Rozbalit vše Re: regulární výrazy - PHP
Nasiel som sikovny online interpreter: regex.

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.