Autor Zpráva
radekt
Profil
Dobrý den, procházel jsem tuto diskusi a jiné stránky zabývající se regulárními výrazy, ale nedaří se. Provádím čištění kódu a potřebuji (mimo jiné) vyhledat prázdné tagy, takže např.
<div></div>, <div> </div>, <div>    </div>, <div id="abc"> </div>
nebo také třeba na více řádcích:
<div>
      </div>
Z toho, co jsem četl u vás a jinde mi vycházelo, že tento reg. výraz: <div.*>\s*</div>, by mohl splňovat to, co potřebuji. Najde ale vše kromě prázdného divu na více řádcích.
maks
Profil
radekt:
ještě ti tam chybí na správných místech "?", tedy nepovinnost daného znaku (příp. sady znaků). Ve tvém případě <div.*?>\s*?</div>
radekt
Profil
maks:
Upraveno. Tak jako tak se to chová stejně. Na www.regularnivyrazy.info/shrnuti-syntaxe.html se píše, že \s odpovídá bílému znaku (\n, \r, \t, mezera aj.), tak by to mělo znamenat, že s hvězdičkou bude hledat, dokud nenarazí na koncový tag, ale není to tak.
juriad
Profil
Ukázka:
$str = '<div></div>, <div> </div>, <div>        </div>, <div id="abc"> </div> <div>

        </div>';

preg_match_all('~<div[^>]*>\s*</div>~', $str, $out);
var_dump($out);
Narozdíl od maksa doporučuji spíše variantu zákazu uzavírací závorky. Výstup nalezených výskytů.
array(1) {
  [0]=>
  array(5) {
    [0]=>
    string(11) "<div></div>"
    [1]=>
    string(12) "<div> </div>"
    [2]=>
    string(12) "<div>    </div>"
    [3]=>
    string(21) "<div id="abc"> </div>"
    [4]=>
    string(14) "<div>

    </div>"
  }
}
radekt
Profil
juriad:
Tento výraz mi nenašel ani řádkové tagy. Ještě upřesním - čištění kódu dělám v PSPadu, kde chci takovéto věci hledat a hromadně mazat. Dal jsem otázku do této diskuse, protože zde se reg. výrazy nejvíce řeší, snad jsem neudělal chybu. Plus těch variant, jak takový prázdný tag s bílými místy může vypadat, kolik bílého místa může obsahovat, může být mnohem více.
juriad
Profil
Aha, regulární výraz v PSPadu je něco jiného než regulární výraz v PHP. Bohužel PSPad nemám, nepomohu.
Je však možné, že regulární výrazy v PSPadu jsou omezené na jediný řádek a víceřádkové výrazy tedy nelze napsat.
Davex
Profil
V PHP se standardně nepovažuje znak konce řádku za bílý znak, ale za konec textu a více řádků se zpracovává jednotlivě řádek po řádku. Mohl by se hodit modifikátor m.

~<div[^>]*>\s*</div>~m
radekt
Profil
Davex:
Také tento výraz nenašel ani řádkové tagy. Ale děkuji moc za ochotu. Ještě se zkusím poptat na PSPad fóru nebo autora programu, zda PSPad nemá reg. výrazy omezené na jeden řádek, jak píše juriad, případně, jak program zachází s koncem řádku. Ještě jednou děkuji.

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: