Autor | Zpráva | ||
---|---|---|---|
Radim24 Profil |
#1 · Zasláno: 15. 10. 2009, 10:22:47
Zdravím,
mám takový malinký problém s regulárním výrazem: preg_match("/(?:<body.{0,25}>).*(?:<\/body>)/ims", $data, $body); $body=$body[0]; Podle mých informací by (?:něco) nemělo zahrnout do výsledku to co je uvnitř závorek. Mělo by to tedy najít jen to, co je uvnitř těla html kódu. Mě se ale ve výsledku zobrazuje i to <body></body>.... V čem je tedy problém, co dělám špatně? Dík |
||
Majkl578 Profil |
#2 · Zasláno: 15. 10. 2009, 10:32:07 · Upravil/a: Majkl578
zkus tento:
'~<body[^>]*>(.*?)</body>~ims' mmj, pod klicem 0 je vzdy puvodni retezec, pouzij 1 k ziskani extrahovaneho obsahu body... :) |
||
Joker Profil |
#3 · Zasláno: 15. 10. 2009, 10:38:39
Radim24:
Sice to není odpověď přesně na dotaz, ale alternativní řešení by bylo: /<body.{0,25}>(.*)<\/body>/ims ...a odchytávat si ten závorkovaný subvýraz. Mimochodem: <body.{0,25}> možná nedělá to co chcete aby to dělalo. V následujícím kódu jsem označil oblast, která odpovídá výrazu <body.{0,25}>: <html><body><h1>Nadpis</h1><p>ahoj</p></body></html> |
||
Radim24 Profil |
#4 · Zasláno: 15. 10. 2009, 11:05:56 · Upravil/a: Radim24
No, to je blbé, že to nejde tak jak jsem si myslel, ale taky bych to mohl udělat pomocí pojmenované předlohy, to už je lepší než ve výsledku mít jen nějaký číselný index.
preg_match("/(?:<title>)(?<words>.*)(?:<\/title>)/ims", $header, $title); |
||
tiso Profil |
#5 · Zasláno: 15. 10. 2009, 11:34:27
Radim24 [#1]
Máš zlé informácie. Presne je to tak, že ten subvýraz sa nezahrnie do výsledkov ako ďalšia položka vráteného poľa: pattern: /before(1)(2)after/ text: before12after matches: Array ( [0] => before12after [1] => 1 [2] => 2 ) vs. pattern: /before(1)(?:2)after/ text: before12after matches: Array ( [0] => before12after [1] => 1 ) |
||
Časová prodleva: 15 let
|
0