Postavíme Vaši firmu na nohy
Zobrazují se odpovědi 1 až 11 z 11

Pomoc s regulárním výrazem

  1. Zdravím,

    pomůže mi někdo s regulárním výrazem? Snažím se vypsat nadpisy. Pokud jde čistě o formu <h2>Nadpis</h2> tak to funguje. Potřeboval bych úpravu, že se v elementu může vyskytnout třída class="tt tt--[1-10]", ale také nemusí. Poradí někdo?

    PHP kód:
    #<h[2-6]*[^>]*>.*?<\/h[2-6]># 
    předem díky

  2. Co se právě děje na Webtrhu?
  3. a nestacilo by to vyhledat vse mezi '>' a '</h[2-6]>' ? tzn resit jen zaviraci tag

  4. zkus
    #<h[2-6][^>]*?>.*?</h[2-6]>#

  5. Kód:
    ~<h[2-6][^>]*>.+</h[2-6]>~U
    nejde?

    resp:
    Kód:
    ~<h[2-6][^>]*>(?P<nadpis>.+)</h[2-6]>~U
    a nadpis budes mat pod klucom "nadpis"

  6. Díky za rady, vyzkoušel jsem všechny možnosti, ale vždy mi to vypíše jen ty nadpisy, které nemají třídu. Zkouším to přes:

    Kód:
    preg_match_all('#<h[2-6]*[^>]*>.*?<\/h[2-6]>#',$content,$matches);
    var_dump($matches);


    ---------- Příspěvek doplněn 11.10.2018 v 19:50 ----------

    ještě teda je u všech id - <h2 class="tt tt--1" id="nazev-id">Nadpis H2</h2>

  7. tak robis nieco zle.. mne to ide:

    Kód:
    $content = '<h2>Prvy</h2> fwfwe <h3>Druhy</h3> <h4 class="test">Treti</h4>';
    
    preg_match_all('~<h[2-6][^>]*>(?P<nadpis>.+)</h[2-6]>~U',$content,$matches);
    var_dump($matches);
    vrati:

    Kód:
    ...  ["nadpis"]=>
      array(3) {
        [0]=>
        string(4) "Prvy"
        [1]=>
        string(5) "Druhy"
        [2]=>
        string(5) "Treti"
      }
    ...
    druhy test:
    $content = '<h2>Prvy</h2> fwfwe <h3>Druhy</h3> <h4 class="test">Treti</h4> <h2 class="tt tt--1" id="nazev-id">Nadpis H2</h2>';

    preg_match_all('~<h[2-6][^>]*>(?P<nadpis>.+)</h[2-6]>~U',$content,$matches);
    var_dump($matches);
    vrati:
    ["nadpis"]=>
    array(4) {
    [0]=>
    string(4) "Prvy"
    [1]=>
    string(5) "Druhy"
    [2]=>
    string(5) "Treti"
    [3]=>
    string(9) "Nadpis H2"
    }

  8. Hele, v dnesni dobe bys mohl vyuzit toho, ze ten problem uz nekdo vyresil. Misto abys resil low level implementaci nejakych regularu, mohl bys vyuzit jednu z existujich knihoven.

    z googlu prvni random odkaz - lze parsovat pomoci jquery selectoru
    GitHub - tburry/pquery: A jQuery like html dom parser written php.

    Staci najit knihovnu co ti bude vyhovovat a mozna zacnes sedivet o neco pozdeji

  9. Také bych doporučil použít nějaký DOM Parser namísto regulárů. Zítra budeš chtít vedle class přidat ještě id a budeš muset regulární výraz přepisovat.

  10. ok, díky za rady

  11. Citace Původně odeslal Martin Heralecký Zobrazit příspěvek
    Také bych doporučil použít nějaký DOM Parser namísto regulárů. Zítra budeš chtít vedle class přidat ještě id a budeš muset regulární výraz přepisovat.
    DOM parsery jsou robustni a pro mnoho jednoducheho parsovani naprosto zbytecne... navic ty vase "zitra budes chtit pridat X a budes to muset prepisovat prece plati i pro dom parsery - copak nebudu muset rpepisovat kod s dom parserem pokud budu chtit vybrat treba jinou tridu? :)

    Fascinuje me odpor lidi k regularum, pritom regulary jsou prave jedna z vubec nejlepsich veci, ktere se muze programator naucit... Ale tak jasne, stahnout obri knihovnu a zkopirovat par radek kodu z jeji dokumentace je proste jendodussi nez zacit aktivne premyslet :)

  12. Aleši, hovoríš mi z duše..

    regularne vyrazy su mocna a zaroven jednoducha zbran, urcite sa ich oplati naucit a pouzivat tam kde patria, namiesto kdejakych monster rieseni, ktore zakonite budu aplikaciu spomalovat..

    pred par rokmi som videl aplikaciu, kde sa s textu mali odstranit vsetky tagy okrem zopar povolenych.. koder samozrejme pouzil kniznicu s milion patsto triedami, cim parsovanie trvalo skoro sekundu.. vyhodil som to, nahradil par regularmi a parsovanie kleslo na zanedbatelne milisekundy.. takze tak

Hostujeme u Server powered by TELE3