Project

General

Profile

Actions

Bug #9693

closed

\x{} in regexp

Added by znz (Kazuhiro NISHIYAMA) almost 10 years ago. Updated about 4 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.2.0dev (2014-02-23 trunk 45151) [x86_64-linux]
[ruby-dev:48085]

Description

https://github.com/rurema/doctree/issues/80 の話です。

regparse.cOnigSyntaxRuby では ONIG_SYN_OP_ESC_X_BRACE_HEX8 が有効になっていて、使えることを意図しているように見えるのですが、正規表現リテラルだと parser が通してくれなくて syntax error, unexpected '{', expecting end-of-input になるようです。

Regexp.new に直接渡しても re.c の中で invalid hex escape になるので使えないようです。

Updated by naruse (Yui NARUSE) almost 10 years ago

  • Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN to 2.0.0: DONTNEED, 2.1: DONTNEED

なぜ OnigSyntaxRuby に ONIG_SYN_OP_ESC_X_BRACE_HEX8 が含まれているのか謎ですが、
挙動・仕様としてはそのままでいいんじゃないでしょうか。
"\x{a}" も許されてないし。

また、これを外したからといって最適化で消えるようになる気もあんまりしないので、気分の問題ですかねぇ。
消してもいいとは思うのでコミットしたい場合はしてくださいですが、した場合はupstreamへの反映をよろしくお願いします。
https://github.com/k-takata/Onigmo/tree/tmp/ruby-2.0.x

Updated by mame (Yusuke Endoh) about 4 years ago

  • Status changed from Open to Rejected

"\x{00000020}" も書けないわけなので、とりあえず現行の挙動は意図的であると考えます。逆に、/\x{00000020}/ を許すなら "\x{00000020}" も許さねば、ってことになるのではないでしょうか。そういう仕様変更に意見はないですが、Bug ではなかろうということで閉じます。

ONIG_SYN_OP_ESC_X_BRACE_HEX8 は実装詳細なんで、直したかったら成瀬さんの言うとおりにするか、もしくはupstreamを直してもらってからバックポートするのが良さそうな気がします。

Actions

Also available in: Atom PDF

Like0
Like0Like0