Autor Zpráva
Kajda
Profil *
Dobrý den,
řeším problém se zápisem regulárního výrazu.
Potřeboval bych zapsat: vyhovuje řetězec, který neobsahuje slovo ...
Umím zapsat neobsahuje znak: [^x]*, ale nevím, jak v podobné logice zapsat "neobsahuje slovo". Je to možné?
Děkuji předem za odpovědi.
Jan Tvrdík
Profil
Kajda:
Je to možné?
Možné to je, ale je lepší se tomu vyhnout, tj. použít např.

if (!preg_match('#slovo#', $text)) {  // v takto jednoduchém případu by bylo lepší použít strpos
    ...
}
Kajda
Profil *
Jan Tvrdík: Děkuji. Možná mě to trochu oklikou navedlo na - možná poněkud jednoduchou - myšlenku nahradit slovo málo používaným znakem a poté použít "neobsahuje znak". Uvedený případ nemohu použít. Mým problém je jak z HTML kódu vyextrahovat jednu jedinou tabulku s daným class. Dokážu si najít její začátek, ale už ne konec.

Potřeboval jsem tedy něco jako

$hodnota = Preg_Replace ("/^.*(<table[^>]*class=\"infoi nobord ssm\"[^>]*>[cokoliv co není table]*<\/table>).*$/s", "\\1", $zdroj);

jinak se mi samozřejmě vrací vše až po poslední uzavírací tag tabulky, což nechci. Já potřebuji jen tu jednu konkrétní.
peta
Profil
Priklad na nahrazeni obsahu divu, pokud uvnitr neni jiny div.
$str = '<div class="main_content">';
$pos1 = strpos($data, $str) + strlen($str);
$str = '</div>';
$pos2 = strpos($data, $str,$pos1);
$data = substr_replace($data, $insert_code, $pos1, $pos2-$pos1);
Jan Tvrdík
Profil
Kajda:
jak z HTML kódu vyextrahovat jednu jedinou tabulku s daným class
Na to neslouží regulární výrazy, ale DOMDocument a DOMXPath.

Pokud ti nevadí, že to děláš špatně, tak pravděpodobně hledáš ungreedy variantu *.
$hodnota = Preg_Replace ("/^.*(<table[^>]*class=\"infoi nobord ssm\"[^>]*>*?<\/table>).*$/s", "\\1", $zdroj);
DJ Miky
Profil
Ještě tečku:
$hodnota = Preg_Replace ("/^.*(<table[^>]*class=\"infoi nobord ssm\"[^>]*>.*?<\/table>).*$/s", "\\1", $zdroj);
Kajda
Profil *
Díky za odpovědi. O DOM jsem v PHP vůbec nevěděl, ungreedy varinatu také neznám. Jdu studovat, díky za nákop.
PetrFox
Profil *
Jan Tvrdík:
„jak z HTML kódu vyextrahovat jednu jedinou tabulku s daným class“
Na to neslouží regulární výrazy, ale DOMDocument a DOMXPath.
Jan Tvrdík, Jan Tvrdík:
DOMDocument je třída pro XML dokumenty, HTML s neuzavřenými elementy není XML. DOMDocument lze použít pro XHTML.

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: