Autor Zpráva
Radim24
Profil
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
zkus tento:
'~<body[^>]*>(.*?)</body>~ims'

mmj, pod klicem 0 je vzdy puvodni retezec, pouzij 1 k ziskani extrahovaneho obsahu body... :)
Joker
Profil
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
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
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
)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: