Autor Zpráva
capricorn
Profil
Zdravim,

potrebuji z retezce odstranit vsechno co nema pred a za zavorku.


$code = 'blablabla (chci)';
$code = preg_replace('/([a-z]{4})/', '', $code);
echo $code; // potrebuji vypsat "chci"
nightfish
Profil
capricorn:
potrebuji z retezce odstranit vsechno co nema pred a za zavorku.
chceš tedy zjistit, co je v závorce?
if (preg_match('~\((.*)\)~Us', $code, $matches)) echo $matches[1];
capricorn
Profil
nightfish:
chceš tedy zjistit, co je v závorce?
Potrebuji z retezce odstranit vse krome textu v zavorce.
Majkl578
Profil
$code = 'aaa (bb) cc(dd) ee';
$code = preg_replace('~.*(?:\((.+)\)).*~Ui', '\\1', $code);
echo $code;
capricorn
Profil
Majkl578:

Chvilka na vysvetleni by se nenasla? Potreboval bych to vysvetlit, jinak to nepochopim. ;-) Nechapu hlavne tohle (?:\((.+)\))
Majkl578
Profil
capricorn:
?: znamená nezachytit referenci
\( a \) je escapování závorek mezi kterými hledáme
(.+) zachytí vše mezi závorkami (těmi escapovanými)
ostatní se zahodí
TomášK
Profil
K čemu je tam ta zpětná reference, kterou nezachytáváš? Zdá se mi, že se to bude chovat stejně i bez ní.
Majkl578
Profil
TomášK:
Nebude, respektive bude, ale musel bych v druhém argumentu funkce použít \\2 namísto \\1, jelikož bych chtěl druhou referenci (tu vnitřní mezi závorkami). A já preferuji řešení kdy nepotřebné reference zahazuji... :)

Můžeš to zkusit tak, že odstraníš ?: a uvidíš co se stane. Vrátí ti to to co chceš, ale ohraničené závorkami (které nechceme).

Spíš by byla dobrá připomínka to, že je zbytečná, což když na to znovu koukám je (Nechal jsem ji tam když ten regulár měnil).
Šlo by to bez ní, takto:
~.*\((.+)\).*~Ui
capricorn
Profil
Majkl578:
Promin, ale vcera jsem byl uz offline. Jinak dekuji za vysvetleni.

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