Autor Zpráva
xlifer
Profil
Jak načíst všechny uzavřené slova do [zacatek]slovo[konec] z textu do array pole $out ?

$text = "Sobotní požár slovenského [zacatek]stredovekého[konec] hradu Krásna Horka mají nejspíš na svedomí [zacatek]chlapci[konec] ve veku 11 a 12 let. Pod hradem si chteli zapálit [zacatek]cigaretu[konec], vzplála ale tráva a rozlehlá louka postupnì vyhorela až k hradu. Poté vzplála budova. V [zacatek]sobotu[konec] dostali hasici ohen pod kotrolu, v nedeli se ale [zacatek]požár[konec] na nekolika místech opet rozhorel.";

preg_match_all("~\[zacatek\](.*)\[konec\]~i", $text, $out);

echo print_r($out);
Keeehi
Profil
preg_match_all('~\[zacatek\](.*?)\[konec\]~', $text, $out);
Případně to samé dělá modifikátor U. Pak ale již bez toho otazníku.
xlifer
Profil
Keeehi:

Díky tohle funguje, ale nechápu proč nestačí .* když tečka je cokoliv a hvězdička kolikrát chci? Nebo se pletu?

A ješte dotaz, zda je možné array pole omezit pouze na výběr uzavřených slov. Teď se vlastně ukládá do array 0 -> celý uzavřený tvar a 1 -> slovo ?
Keeehi
Profil
xlifer:
* je sama o sobě "žravá" -> snaží se vytvořit co nejdelší řetězec. Tudíž, pokud je v textu 2x [konec], zastaví se to až na tom druhém, protože se tím vytvoří delší řetězec.
naproti tomu otazníkem za hvězdičkou (resp. modifikátorem U) tuto vlastnost obrátíme a od tak se hvězdička snaží vytvořit co nejkratší řetězec přesto však odpovídající tomu pravidlu. Proto se zastaví už na prvním výskytu.

Druhá otázka - ne
Jediné, co se s tím dá udělat je to 2rozměrné pole otočit o 90 stupňů, ale to je tak vše.

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