Netscape 8.1: Kudrnatá závorka vrací úder
Mám rád kudrnaté závorky (curly brackets). Programátoři a lidé vládnoucí anglickým jazykem vědí, že mluvím o závorkách, jimž se v češtině říká složené. Nejen programátoři dále vědí, co jsou to regulární výrazy a k jaké speciální akci v nich tyto závorky slouží.
Kudrnaté závorky slouží k vyjádření počtu opakování určitého výrazu, říká se jim kvantifikátory. To však pro tento zápisek není až tak podstatné, protože jsem řešil úplně jiný problém. V textu, který jsem zpracovával reguláry, se vyskytovaly právě tyto závorky a já s nimi potřeboval pracovat. Napsal jsem si (v JavaScriptu podotýkám) jednoduchý regulární výraz a vše fungovalo krásně do chvíle, než jsem jej vyzkoušel v novém Netscape Browseru 8.1, který mi hlásil chybný kvantifikátor.
Krátkou prohlídkou výrazu jsem se přesvědčil, že žádné kvantifikátory nepoužívám, a pustil jsem se do zkoumání. Dost možná jsou mé znalosti regulárních výrazů chybné, přeci jen jsem spíše kodér než programátor, nicméně vždy jsem se domníval, že složená, tedy kudrnatá závorka se ve výrazu bere jako znak bez speciálního významu, pakliže neleží v patřičném kontextu. Pod tímto kontextem si osobně přestavím situaci, kdy je otevírací závorka následována číslicí či uzavírací, pakliže je kvantifikátor stále otevřený.
Firefox 1.5.0.4 se mnou souhlasí, IE6 se mnou souhlasí, Opery se mnou souhlasí, Netscape Browser 8.1 protestuje. Právě Netscape bere kudrnaté závorky jako speciální znaky ve většině případů, výjimkou je pouze jejich umístění ve výčtu (hranaté závorky).
Zajímavé je, že jádro Netscape Browseru 8.1 je založeno na Firefoxu. Schválně jsem si na školním stroji, který disponuje Firefoxem 1.0.6, zkusil aplikaci spustit. Vida! Stejná chyba.
Jak z toho ven?
Inu, řešení je snadné, stačí každý výskyt kudrnaté závorky mimo výčet nahradit její hexadecimální reprezentací (\x7B pro {, \x7D pro }; ne, předřazení zpětného lomítka nefunguje v Netscapu vždy, logiku v tom nehledám). Tento defenzivní styl vůbec není u regulárních výrazů na škodu, implementace v prohlížečích se v detailech liší i u zcela základních konstrukcí. A určování kontextu speciálních znaků je, zdá se, jedním z těchto rozdílů.Ale možná se pletu já a prohlížeče jen projevovaly nadstandardní snahu regulár zpracovat. V tom případě bych byl rád, kdybyste mi situaci osvětlili. A nějaký link na článek, který by o regulárních výrazech vyprávěl poutavě, šířeji a přesně, by potěšil určitě nejen mne.
Díky!

Ahoj Dero, složené závorky mají ve všech mě známých definicích regulárních výrazů speciální význam, který nezávisí na kontextu. Literál „{“ je tak potřeba zapsat jako „\{“. Škoda, že jsi neuvedl konkrétní příklad, bylo by to o něco jasnější…
Fuj, „… mně…“
Borek: Tak jsem to schválně hledal – a našel jsem v dokumentaci Perlu, z které jsem se blahé paměti RE učil, cituji:
Zdroj: http://www.perl.com/…/perlre.html
Otázka je, jak tomu rozumět a jestli je to správný zdroj.
Na latrine se uvadi, ze ses DGX, tedy zadny Dero, jak je to?
Otaznik: Přesně naopak, já jsem Dero. Na la trine píši jako dgx, ano, ale jen v alkoholovém opojení. Mimochodem, že je La Trine geniální?
Omlouvam se za off-topic, ale neda mi to. Takze si nejdriv zalozil anonymni La Trine a potom „oficialni“ Dero blog? A tenhle blog uz je „opravdovej“ – mysleno, zda udaje v sekci „o me“ jsou pravdive nebo jen vymysl dalsi identity?…
… protoze pak jsi lzivy i v tomto blogu – napriklad ihned v tomto clanku, kde je zminka o tom, ze ses prece jenom koder, nez programator a La Trine obsahuje dost clanku specificky zamerene na programming a alespon na prvni pohled to nevypada, ze se jedna o nejake hobby programming nejakeho web kodera, chapes…
5. tím chceš říci, že jen v alkoholovém opojení píšeš geniální články? To se mi nezdá…
Přeji hodně zdaru při tvorbě obou blogu.
A propo nezačněš psát nějaký třetí?
http://blog.filosof.biz/ Deruv treti
Nevim jestli o tom víte, a Dero bude možná naštvaný, ale on si vede ještě http://radekhulan.cz/
10. aby nebyl naštvaný někdo jiný :)
9. a já si říkal, že se o setkání vždy dozvím až je po něm…. teď už vím proč :)
Problém bude v tom, že neexistují jedny regulární výrazy, ale celá řada implementací. Třeba v PHP najdeš hned dvoje. Horší POSIXové a lepší Perlové. Podobné rozdíly bych očekával i mezi browsery. Pravda, zrovna mezi Firefoxem a Netscapem ne.
p.s. víte, který z těchto blogů (ale doopravdy) píše Pixy? A prosím zasvěcené, aby nenapovídali.
to jsou všechno kecy, všichni ví, že to všechno píše generátor textů…
2 Dero: Je v tom trochu zmatek. Třeba v PHP manuálu u PCRE je složená závorka uvedena jako speciální znak, zatímco v man stránce POSIX výrazů stojí
>`\' followed by one of the characters `^.[$()|*+?{\' (matching that character taken as an ordinary character)
a o pár řádků níže
Každopádně bych se spolehnul na větu
(nepočítáme-li třeba \w), takže \{ je ve všech případech bezpečný zápis – i kdyby { nebyl speciální znak, zpětné lomítko se prostě zahodí. Ve svých výrazech toho občas využívám, když si nejsem jistý, jestli tam zpětné lomítko být musí nebo nemusí.
[12] Mi bylo jasné, že to Pixy nevydrží. Ale odpověď opravdu netuším.
Btw. jak že tě máme oslovovat? dgx, dero, hulan, filozof? Nebo to máme vybírat podle konkrétního blogu?
Už mi to docvaklo.. Pixy píše weblog „A tak dále..“, sedí to trochu i zaměřením, takže…
Jo internetová doba je zlá.
Dero, ty ozralo, se nezdas :) regexp nicmene neni zalezitost perlu, a implementaci existuje habadej, a ‚(If a curly bracket occurs in any other context, it is treated as a regular character.)‘ je myslim zalezitost ciste perlova. ani si nejsem jistej jesli javascript ma nekde ve specifikaci uvedeno ze pouziva perl regexpy.
[9] Tak to byla urážka nejtvrdšího kalibru. Porovnávat vůbec někoho s Radkem Hulánem. Vždyť ten je horší než…no, raději nevím co. Jinak je zajímavé, kolik lidí by se začalo chytat za hlavu při čtení těhle komentářů. Chudáček blondýna by z toho měla solidní guláš.
A ještě něco… Jak si může někdo myslet, že np. Hulán doopravdy „není“? A co byste řekli na výpis z obchodního rejstříku?
Reaguji na yossariana:
Má. Implementaci si však každý prohlížeč dělá sám, takže kdo ví…
Já tomu říkám chlupaté závorky
sdfwholesale MAC Mascara</br> sdf wholesale MAC Concealer</br> sdf wholesale MAC Eyeliner Gel</br> sdf
Merchant Cash Advance Merchant Accounts Gold Mine some one like it? of cause!I sure!
China wholesale! cheapest! Aluminum alloy Place Card Holders Aluminum bowl picking tool Aluminum bowl-picking tool
shoes:nike shoes, air jordan series,air force one,air max,nikeshox,dunk,kobe,gucci,bape,puma,adidas,timberland,prada,James,Icecream,etcshort sleeve polo shirt fashion t shirts long sleeve polo shirt
handbags:lv,gucci,chanel,prada,chloe,DG,juicy,hermes,balenciaga,tous,mulberry,christian dior,etc colthes/jeans:bape,bbc,Polo,lacoste,evisu,Baby,A&f,ed-hardy,lrg,hoodies,etc
The online shopping product continues to ripen nike nz shox. A party shox r4 shoes swear by been turning towards shox shoes shopping online instead of the average air yeezy shoes passage.
prada shoes for men
you would substitute valid to move receipts of the bent of louis vuitton bags shopping from your louis vuitton handbagsown inland. crackerjack is no craving to prejudice lv wallet mark the crave merchandise at the normal particle and craft louis vuitton purses stores.
ghd hair straightener.
chanel handbags this space parlous fatiguing and tolerably frustrating prada bags stable if their instigation is to emolument glee cache louis vuitton handbags gifts. This is now professional are a allow for of kinsfolk enterprise to gucci handbags
hollister ukgood