Autor Zpráva
Nox
Profil
Zdravím,
jsem na RV celkem lama, ale už dlouho s tím bojuju a hodně mi pomáhá program Regexp Coach, o kterém jsem zde slyšel. Bohužel to, co funguje v něm pak v PHP často nejede

Momentálně se například snažím vyjádřit toto:
Najdi uzavírací tag odstavce za nímž je čárka. Od tohoto místa čti jakékoliv znaky dokud nenarazíš na jakýkoliv tag, s výjimkou tagu <br>

Zkoušel jsem např.:
(</p>)(-(.(?<!(<[ac-zAC-Z])))*)
Což v TRC jede, ale v PHP téměř vůbec:
preg_match('/(<\/p>)(-(.(?<!(<[ac-zAC-Z])))*)/',$text,$re);
$text=preg_replace('/(<\/p>)(-(.(?<!(<[ac-zAC-Z])))*)/','$1<ul>$2</ul>  $3',$text);
echo "<hr>";
echo htmlspecialchars($text);
echo "<hr>";
var_dump($re);


<p>Test</p>- seznam<br /> - mlíko<br /> - chleba<br /> - máslo<br /> <br /> <hr> <p><em>Tady
=>
<p>Test</p><ul>- seznam<br /></ul>> - mlíko<br /> - chleba<br /> - máslo<br /> <br /> <hr> <p><em>

array(4) { [0]=> string(18) "

- seznam
" [1]=> string(4) "" [2]=> string(14) "- seznam
" [3]=> string(1) ">" }
los
Profil *
Ak som dobre pochopil, tak regulárny výraz môže vyzerať napr. takto:
/<\/p>\s*(-.*?)(<(?!br)|$)/i


Kód:
$text = "<p>Test</p>- seznam<br /> - mlíko<br /> - chleba<br /> - máslo<br /> <br /> <hr> <p><em>Tady";
$text = preg_replace('/<\/p>\s*(-.*?)(<(?!br)|$)/i', "</p><ul>$1</ul>$2", $text);
echo htmlspecialchars($text);


Výsledok:
<p>Test</p>- seznam<br /> - mlíko<br /> - chleba<br /> - máslo<br /> <br /> <hr> <p><em>Tady
=>
<p>Test</p><ul>- seznam<br /> - mlíko<br /> - chleba<br /> - máslo<br /> <br /> </ul><hr> <p><em>Tady
Nox
Profil
Díky moc...ale nechápu to, pořád to nejede, v TRC se to vybere správně, ale v PHP i tak pak nic neprovede, možná to mám blbě
někde okolo, budu se v tom nějakou dobu rýpat a pak se ohlásím...ale i tak moc díky
Nox
Profil
No už jsem to vyřešil jinak, ale stejně opět výsledky PHP a TRC nesouhlasí... nevim...
Mastodont
Profil
Nox
No a není to dáno rozdílem mezi těmi regexp enginy?
http://weitz.de/cl-ppcre/#perl
Nox
Profil
Díky
Asi ano, je to škoda, ještě jsem narazil na Expresso, ale to má složité rozhraní a není realtime, tak jsem to ani dál nezkoumal,
třeba se ještě něco najde

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:

0