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!

22. 6. 2006, 12.27 | Javascript, AJAX.


31 komentářů k “Netscape 8.1: Kudrnatá závorka vrací úder”

  1. Borek říká:
  2. 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ší…


  3. Borek říká:
  4. Fuj, „… mně…“


  5. Dero říká:
  6. 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:

    The following standard quantifiers are recognized:

    * Match 0 or more times
    + Match 1 or more times
    ? Match 1 or 0 times
    {n} Match exactly n times
    {n,} Match at least n times
    {n,m} Match at least n but not more than m times

    (If a curly bracket occurs in any other context, it is treated as a regular character.)

    Zdroj: http://www.perl.com/…/perlre.html

    Otázka je, jak tomu rozumět a jestli je to správný zdroj.


  7. Otaznik říká:
  8. Na latrine se uvadi, ze ses DGX, tedy zadny Dero, jak je to?


  9. Dero říká:
  10. 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í?


  11. Otaznik říká:
  12. 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?…


  13. Otaznik říká:
  14. … 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…


  15. Pavel říká:
  16. 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í?


  17. error414 říká:
  18. http://blog.filosof.biz/ Deruv treti


  19. Jódlující bernardýn říká:
  20. Nevim jestli o tom víte, a Dero bude možná naštvaný, ale on si vede ještě http://radekhulan.cz/


  21. Pavel říká:
  22. 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č :)


  23. dgx říká:
  24. 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.


  25. Misha říká:
  26. to jsou všechno kecy, všichni ví, že to všechno píše generátor textů…


  27. Borek říká:
  28. 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

    A `{' followed by a character other than a digit is an ordinary character, not the beginning of a bound(!).

    Každopádně bych se spolehnul na větu

    a `\' followed by any other character(!) (matching that character taken as an ordinary character, as if the `\' had not been present(!))

    (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í.


  29. Petr Stříbný říká:
  30. [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?


  31. Petr Stříbný říká:
  32. 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á.


  33. yossarian říká:
  34. 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.


  35. adzio říká:
  36. [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áš.


  37. adzio říká:
  38. 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?


  39. Borek říká:
  40. Reaguji na yossariana:

    ani si nejsem jistej jesli javascript ma nekde ve specifikaci uvedeno ze pouziva perl regexpy

    Má. Implementaci si však každý prohlížeč dělá sám, takže kdo ví…


  41. Wan-To říká:
  42. Já tomu říkám chlupaté závorky :-)


  43. sdf říká:
  44. sdfwholesale MAC Mascara</br> sdf wholesale MAC Concealer</br> sdf wholesale MAC Eyeliner Gel</br> sdf


  45. Dropship říká:
  46. Merchant Cash Advance Merchant Accounts Gold Mine some one like it? of cause!I sure!


  47. Dollar Items říká:
  48. China wholesale! cheapest! Aluminum alloy Place Card Holders Aluminum bowl picking tool Aluminum bowl-picking tool


  49. shox r4 říká:
  50. 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


  51. dddd říká:
  52. 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.


  53. dddd říká:
  54. prada shoes for men


  55. dddddddddddddddddd říká:
  56. 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.


  57. dddddddddddddddddd říká:
  58. ghd hair straightener.


  59. ddd říká:
  60. 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


  61. hollister uk říká:
  62. hollister ukgood


Zanechte komentář





Můžete použít Texy! formátování.
Pokud se obsah boxů níže mění, zatímco píšete, potom žádné číslice nevyplňujte. V takovém případě antispam funguje, pouze se prohlížeči nepovedlo skrýt tento box.