Opcionális zárójel reguláris kifejezésben

Egy SQL lekérdezésben az adatok között vannak olyanok, amik után van egy zárójelek közti karaktersor, míg másokban nincs. Hogyan lehetne erre PHP-ban regex-et illeszteni?
A probléma leegyszerűsítéseként ezzel próbálkoztam: '.*".$var.".*' , aztán rájöttem, hogy a zárójel nem "bármely" karakter... Összességében számtalan opcionális zárójel illesztés kipróbálása után egyik sem tudta kivenni a kívánt rekordot.

Hozzászólások

Nem tudom, hogy jól értem-e a kérdésed, de szerintem valami ilyesmiről lehet szó:

// Places three space separated words into $regs[1], $regs[2] and $regs[3].
ereg("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)", $string, $regs);

http://php.net/manual/en/regex.examples.php

Ebből mit akarsz kivenni?
Külön az XXX XXXet, és az YYYt, vagy egyben az egészet, csak az a cél, hogy matcheljen az

XXX XXX (YYY)
és az
XXX XXX
formára is?

Ill ha ki kell venni darabokat, akkor mi van a spacekkel (soreleje, zárójelek két oldalán)?

--
de egyébként kb: http://regexr.com/396ir

Nyilván lehet, gondolom van dokumentálva. Mivel kerülöm a phpt, ezért csak google foo, de van egy prcenek nevezett izé, ami kifejtve perl compatible regular experssions. Itt az első link alatt van a konrkét mit hogyan kell reference doksi, a harmadik alatt a különbségek a perltől (amire ránézve semmi komoly veszteség), a negyedik meg kifejti, hogy a régi posixes regex enginetől miben különbözik.
Abból, hogy te lent olyan mintát adtál meg, amiben nincsenek delimeterek, ezen link alapján valószínűleg te a régi, itt deprecatednek mondott php regex implementációt használod (Merthogy az első pont arra hívja fel a figyelmet, hogy kellenek), és mivel a doksi máshol az 5.005ös perlre hivatkozik, ami üszkve 15 éve volt, lehet érdemes lenne megnézned a másikat :)

De mondom, passz, nem beszélek phpül.

Hacsak félre nem értettem az egészet, itt nem a php RE-kezelése focizik: a kolléga mysql-ből kérdezne le RE alapján - és a többször idézett hibaüzenet is a mysql-é.

Ezért firtatnám, hogy hogyan is néz ki a bukó sor szélesebb környezete, meg azért, mert a ugyan a mysql dok szerint ERE az, amit használ, de én mégis csak megnézném, hogy mit lépne az a példány + és ? mennyiségjelzők nélkül, és a BRE zárójelkezelésével. Ilyen teszt egyébként könnyen végezhető az ebben foglalt példák szerint: http://dev.mysql.com/doc/refman/5.1/en/regexp.html

szerk.: úgy látszik, csak én értettem így, hogy mit akar a költő.

Attól még simán lehet igazad :-) Az eddig infókból tulajdonképp kis túlzással ikeás hintaszéket is össze lehet rakni. Mint mondtam, nem nagyon beszélni php (10 éve nem nyúltam hozzá csak bottal, és akkor se sokat), uh én elhittem a regexet, aztán gugliztam, de el tudom képzelni, hogy tulajdonképpen valami mysql selectet szeretne összerakni.

Valóban ez lett volna a célom és valóban hibáztam, hogy a php-t és a mysql-t ilyen téren egy kalap alá próbáltam vonni. Végülis nagyon egyszerű megoldása lett a problémának, egy "like" és két "%" felhasználásával. Igazatok van, tényleg túl lett bonyolítva a dolog a részletek nem ismerése miatt.

Hja hát úgy tűnik van akin nem lehet segíteni! Mert a) képtelen elnyökögni értelmesen, h mi a problémája; b) szólnak neki, hogy akkor másolja már ide a kibaszott kódját, h abból majd hátha kiderül mit akar - de ezt meg sem hallja; c) adnak neki egy működő mintát, akkor meg jön azzal, hogy húúúáááá a PHP nem illeszt - hát persze...mert ő már eddig is sejtette..

$str = "XXX XXX (YYY)
XXX XXX";
$regexp = "/\s*([^\(]+)\s*(\((.+)\)\s*)?/";

preg_match($regexp, $str, $match);
print_r($match);

//Array ( [0] => XXX XXX (YYY) [1] => XXX XXX [2] => (YYY) [3] => YYY )

Ha a zárójelet literális karakterként akarod megadni, akkor kell eléje egy \ jel.

Most vettem észre, hogy írtál mintát is.

Én valami ilyesmire gondolok:

Ha mindkét változatra illeszkednie kell, akkor valami hasonlót tudok elképzelni. (Nem tudtam kipróbálni.)

" .+ .+( \(*.+\)*)?"

Itt a kérdőjel jelzi az opcionális részt a zárójelek között. (Ahogy látom, már elöttem is írták.)

Lehetne látni az egész parancssort és a környezetét?
Ui. az itt posztolt regexpek a feladatra (vagy másra) jók, viszont itt a mysql panaszkodik, hogy nem tudja úgy értelmezni, ahogyan ő látja.
A hívás kontextjével lesz a gond (konkrétan valamilyen idézőjelezési mizériát sejtek).