The Cusp of Helix

Intact Case

仕様かバグか

Javascript と Ruby で「ゼロ幅マッチ後にマッチ開始ポインタがひとつ進む」という挙動は、大多数の実装では問題にならないと思われます。しかしながら、/^|(Abc)/ のようなマッチパターンが直感的に実装できないのは、個人的にはバグに近いものだと考えています。

今回指摘した OR 条件の問題について、 PHP と Javascript|Ruby のどちらの挙動が標準規格に準拠しているのかは、まだ把握していません。標準規格で定義されてないか、プログラミング言語の実装ミスなのか、 PHP が独自実装して対処しているのかなど、色々な原因が考えられます。

代表的な正規表現の標準規格

  • POSIX BRE (Basic Regular Expression)
  • POSIX ERE (Extended Reuglar Exression)
  • ECMAScript

POSIX や ECMAScript の標準規格を調べれば突き止められそうですが、時間がかかりそうなので保留しています。原因が解明できた場合は、 Javascirpt や Ruby を実装している団体に報告して修正してもらうつもりでいます。

Javascript(ECMAScript5) は、 ECMAScript6 の策定が進められています。メジャーなブラウザが ECMAScript6 に対応したタイミングで、本件について再調査します。