Autor Zpráva
Matess
Profil *
Dobrý den,

potřeboval bych reg. výraz, který vybere vše co je mezi kulatýma závorkama a pokud možno včetně těch závorek.

Mám podobné texty:
(-254)‎ Nevím co je to za text‎ (testovací)
(+28)‎ Test stránky ‎ (tady je vložený mezitext) (zde je nesmyslně dlouhý text)
(0)‎ Soubor:dai.jpg ‎ (toto by mohlo fungovat.)

A já potřebuji vybrat to co je tučně. Lze to nějak?

Děkuji za odpovědi.
Dan Charousek
Profil
$str = '(-254)‎ Nevím co je to za text‎ (testovací) (+28)‎ Test stránky ‎ (tady je vložený mezitext) (zde je nesmyslně dlouhý text) (0)‎ Soubor:dai.jpg (toto by mohlo fungovat.)';

preg_match_all("~\(.*?\)~", $str, $matches);
var_dump($matches);
Matess
Profil *
Dan Charousek:
Funguje perfektně. Děkuji.

Ještě jeden malý dotaz. Co kdybych chtěl vypsat pouze text, který není v závorkách?
juriad
Profil
Tak si všechny závorky z textu vyhodíš. Pozor na to, že ti zbydou mezery kolem závorek (ale to bys musel přesně popsat, kdy se která mezera má také odstranit).
preg_replace("~\(.*?\)~", "", $str);
Matess
Profil *
juriad:
To by mohlo být ono. Děkuji.
joe
Profil
S RE se vůbec nekamarádím, může prosím někdo vysvětlit, proč je v něm ten otazník a bez něj to "nefunguje"? Díky
Dan Charousek
Profil
joe:
Otazník říká, aby se vzal pouze nejmenší počet znaků, které podmínku splňují. Podmínka v tomhle případě je, že se nachází v kulatých závorkách. Jenže pokud by tam nebyl otazníček tak dostaneš tohle:

Text (neco) asdas lorem ipsum (dolor) sit amet dalsi v (zavorce)

Zvýrazněný text také odpovídá podmínce. Proto ten otazníček.
joe
Profil
Dan Charousek:
Díky :)
Keeehi
Profil
Ještě doplním, že reguláry mají tu nádhernou vlastnost, že jedna věc jde napsat různými způsoby. Tudíž by se dalo použít
"~\(.*\)~U"   // místo ? jsem použil modifikátor U který dělá to samé jako otazník
"~\([^)]*\)~" // místo . je tu teď [^)] které říká - jakýkoliv znak kromě ) - pak je jedno, zda je * žravá či ne

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0