Autor Zpráva
capricorn76
Profil *
Dobrý den,

tento regulár funguje, když před a za tabulkou jsou bílé znaky. Když před a za tabulkou nejsou bílé znaky, tak nefunguje. Potřeboval bych poradit, jak docílím toho, aby ten regulár fungoval v obou případech, bez bílých znaků a s bílými znaky. Děkuji.

preg_match('~(?:\s*)?(?:\s+)<table(.*?)>(.*?)</table>(?:\s+)?(?:\s*)~is', $files, $table_html)
Tori
Profil
Nestačilo by tohle? preg_match('~<table(.*?)>(.*?)</table>~is', $files, $table_html)
První část hledá nula nebo víc mezer, které tam ale nemusí být. Druhá hledá jednu nebo více mezer povinně (a to je to, co vám překáží).
capricorn76
Profil *
Tori:
tohle jsem taky zkoušel, ale když jsou bílé znaky, tak to nefunguje.
preg_match('~<table(.*?)>(.*?)</table>~is', $files, $table_html) 
DJ Miky
Profil
Můžeš poslat nějaký ukázkový vstup, na kterém to nefunguje? Chyba může být někde jinde.
capricorn76
Profil *
DJ Miky:

$files = '<table style="height: 182px;" border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td>Test1</td></tr></table>';
$files .= ' <table><tr><td>Test2</td></tr></table> ';
$files .= '
    <table>
      <tr>
        <td>Test3</td>
      </tr>
    </table>';
 
if(preg_match('~<table(.*?)>(.*?)</table>~is', $files, $table_html)){
  print_r($table_html[0]);
}

Vypíše 'Test1', ale mělo by se vypsat vícerozměrné pole, kde budou řádky z těch tří tabulek
Tori
Profil
preg_match_all
capricorn76
Profil *
Tori:
Proč to nepůjde pouze přes preg_match?
DJ Miky
Profil
preg_match hledá pouze první výskyt (= testuje, jestli zadaný řetězec vyhovuje zadanému reg. výrazu), preg_match_all naproti tomu hledá všechny výskyty.

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: