Autor | Zpráva | ||
---|---|---|---|
capricorn76 Profil * |
#1 · Zasláno: 22. 3. 2013, 16:05:14
Zdravím,
Struktura tabulek: 1. <table>, <tr>, <td>, <th> obsahují značky, které NEUKLÁDAT 2. alepsoň jedna buňka na RŮZNÉM místě v řádku MUSÍ obsahovat dvě VELKÁ písmena, které ULOŽIT. Pokud neobsahuje, tak nic z toho řádku NEUKLÁDAT 3. povolené znaky buněk: desetinná čísla (oddělovač je,.), čísla a písmena, mezera 4. počet buněk se někdy liší 5. např. <td><p style="..">obsah</td> nebo <th><span ...>obsah</span></th> apod., ULOŽIT obsah, tagy NEUKLÁDAT Děkuji za pomoc. |
||
Virtus Profil |
Myslím, že pro načtení toho HTML kódu by se dalo použít toto: Document Object Model, a pak už by stačilo jenom nějakým cyklem procházet jednotlivý řádky a dalším cyklem uvnitř, procházet buňky, kde by si přes if a regulár kontroloval, jestli obsah buňky obsahuje dvě velká písmena a když bys zjistil, že obsahuje, rovnou uložíš celej řádek, vyskočíš z cyklu pro procházení buněk a jdeš na další řádek.
if pro kotrnolu dvou velkých písmen by mohl potom vypadat asi takhle: if(preg_match('/^.*[A-Z]{1}.*[A-Z]{1}.*$/', $obsahBunky)) |
||
capricorn76 Profil * |
#3 · Zasláno: 22. 3. 2013, 19:10:59
Děkuji.
if(preg_match('/^.*[A-Z]{1}.*[A-Z]{1}.*$/', $obsahBunky)) Zkusil jsem to změnit na if(preg_match('/^.*[A-Z]{}.*$/', $obsahBunky)) .* |
||
Virtus Profil |
.* tohle je regulérní výraz pro jaký koliv string a to i prázdný
tečka = jakej koliv znak hvězdička = že těch znaků může být nula až nekonečno A příde mi divný, že Vám ten můj regulár nefunguje na AB, testoval jsem ho tady: preg_match() online a AB řetězec mi prošel, zkuste si vypsat obsah té proměnné $obsahBunky, jestli v ní opravdu máte string AB |
||
Jan Tvrdík Profil |
capricorn76:
Ověření, že daný řetězec obsahuje alespoň dvě velká písmena: $s = 'fooAbarB'; $valid = (bool) preg_match('#(?:[A-Z].*){2}#', $s); var_dump($valid); |
||
capricorn76 Profil * |
#6 · Zasláno: 22. 3. 2013, 20:02:37
Virtus: Jan Tvrdík:
„zkuste si vypsat obsah té proměnné“ proměnná obsahuje <td>nějaký obsah</td> tedy projde i 'fooAbarB', což je špatně, protože jsem prvotní příspěvek napsal špatně. I když $obsahBunky bude 'fooAbarB', tak to musí být false, i když řetězec obsahuje 2 velká písmena a ostatní jsou malá. Chci jen řádky kde jsou pouze 2 velká písmena, t.j. 'fooAbarB' = false, 'DS' = true zkusil jsem tedy, aby to bralo <tag> if(preg_match('/^<.*?[A-Z]{2}.*?>$/', $obsahBunky)) |
||
Virtus Profil |
if(preg_match('/^\<td\>([A-Z]{2})\<\/td\>$/', $obsahBunky, $match )) //v $match[1] budu mít jenom ty dvě velká písmena, pokud Vám jde pouze o ně |
||
capricorn76 Profil * |
#8 · Zasláno: 22. 3. 2013, 20:20:03
Virtus:
„v $match[1] budu mít jenom ty dvě velká písmena, pokud Vám jde pouze o ně“ nejde mně o $match[1], ale potřebuji upravit if(preg_match('/^<.*?[A-Z]{2}.*?>$/', $obsahBunky)) <td>'fooAbarB</td> = false <th>'fooAbarB</th> = false <td>BC</td> = true <th>FC</th> = true |
||
Virtus Profil |
preg_match('/^\<(t|T){1}(d|D|h|H){1}\>[A-Z]{2}\<\/(t|T){1}(d|D|h|H){1}\>$/', $obsahBunky) Tady v tom případě, už projdou striktně jenom: preg_match('/^\<((t|T){1}(d|D){1}\>([A-Z]{2})\<\/(t|T){1}(d|D){1}|(t|T){1}(h|H){1}\>([A-Z]{2})\<\/(t|T){1}(h|H){1})\>$/', $obsahBunky); <th>AB</th> <td>AB</th> neprojde A pokud jste si jistý, že vždy budete mít tagy s malými písmeny, tj. <td><th>, můžete ten regulár zkrátit na tohle: preg_match('/^\<(td\>([A-Z]{2})\<\/td|th\>([A-Z]{2})\<\/th)\>$/', $obsahBunky); |
||
capricorn76 Profil * |
#10 · Zasláno: 22. 3. 2013, 21:00:35
Virtus:
„preg_match('/^\<(td\>([A-Z]{2})\<\/td|th\>([A-Z]{2})\<\/th)\>$/', $obsahBunky);“ Skvělé, ale nefunguje to, když buňky mají class, style apod. |
||
Virtus Profil |
#11 · Zasláno: 22. 3. 2013, 21:11:24
Tak přidáme malou úpravu s .*:
preg_match('/^\<(td.*\>([A-Z]{2})\<\/td|th.*\>([A-Z]{2})\<\/th)\>$/', $obsahBunky); |
||
capricorn76 Profil * |
#12 · Zasláno: 22. 3. 2013, 21:25:23
Virtus:
Super, děkuji. |
||
capricorn76 Profil * |
#13 · Zasláno: 22. 3. 2013, 23:16:17
Virtus:
potřeboval bych ještě prosím upravit ten regulár, aby fungoval kdekoli v řádku, protože teď funguje jen jako první. Děkuji. |
||
Virtus Profil |
tak opět přidáme .*, na kraje celého reguláru:
preg_match('/^.*(\<(td.*\>([A-Z]{2})\<\/td|th.*\>([A-Z]{2})\<\/th)\>).*$/', $obsahBunky); |
||
capricorn76 Profil * |
#15 · Zasláno: 23. 3. 2013, 11:43:12
Virtus:
Děkuji, ještě bych potřeboval doplnit bílé znaky na začátku, uprostřed, na konci. |
||
Virtus Profil |
\s = "bílé" znaky (mezera, tabulátor, znaky pro zalomení řádků)
preg_match('/^.*(\<(td.*\>\s*[A-Z]{1}\s*[A-Z]{1}\s*\<\/td|th.*\>\s*[A-Z]{1}\s*[A-Z]{1}\s*\<\/th)\>).*$/', $obsahBunky); 1)<td> AB</td> 2)<td>AB </td> 3)<td> AB </td> 4)<td> A B </td> 5)<td>AB</td> Tady: Regulární výrazy, jsou česky popsané základy regulárních výrazu, pomocí nich se dá udělat všechno, nenapadá mně žádný řetězec který by snimi(se základy) nešel popsat. Další informace i trochu složitější věci pak najdete v článcích na interval.cz |
||
Časová prodleva: 11 let
|
0