Bug #3319
closedRegexp#unionの説明と動作で食い違いがある。
Description
=begin
樽家です。
[ruby-dev:41247]から議論したもので、Regexp#unionの説明と動作で食い違いがあります。
食い違いの具体的な例については、
[ruby-dev:41247]及び[ruby-dev:41267]を参照ください。
内容としては、
ドキュメントでは要素のどれにでもマッチする正規表現を返すとしているのに対し、
実装では、
・後方参照を含む場合に他の要素の影響を受けて参照対象がずれる可能性がある。
・文字コード10を意味していた'\10'が後方参照として扱われる可能性がある。
・同じ名前の名前付き捕獲式集合を持つ要素同士のunionではエラーになる。
といったものです。
スレッドの中では動作の方を仕様とするという意見でしたので、苦手ながら英語ドキュメントの修正版を考えてみました。
結局 string-operated と probably を追加しただけですが、こんなのでいいんでしょうか?。。。
Return a Regexp object that is the string-operated union of the given patterns, i.e.,
will probably match any of its parts. The patterns can be Regexp objects, in
which case their options will be preserved, or Strings. If no
arguments are given, returns /(?!)/.
=end
Updated by mame (Yusuke Endoh) over 14 years ago
=begin
遠藤です。
2010年5月19日21:43 Masaya Tarui redmine@ruby-lang.org:
ドキュメントでは要素のどれにでもマッチする正規表現を返すとしているのに対し、
実装では、
・後方参照を含む場合に他の要素の影響を受けて参照対象がずれる可能性がある。
・文字コード10を意味していた'\10'が後方参照として扱われる可能性がある。
・同じ名前の名前付き捕獲式集合を持つ要素同士のunionではエラーになる。
といったものです。
当面は「与えられたパターンにキャプチャがあったら不定」ってことで
どうでしょうか。
diff --git a/re.c b/re.c
index dddd941..e272146 100644
--- a/re.c
+++ b/re.c
@@ -3195,6 +3195,7 @@ rb_reg_s_union(VALUE self, VALUE args0)
- patterns, i.e., will match any of its parts. The patterns
- can be Regexp objects, in which case their options will be preserved, or
- Strings. If no patterns are given, returns
/(?!)/
.
-
- The behavior is unspecified if any given pattern contains capture.
-
Regexp.union #=> /(?!)/
-
Regexp.union("penzance") #=> /penzance/
--
Yusuke Endoh mame@tsg.ne.jp
=end
Updated by tarui (Masaya Tarui) over 14 years ago
=begin
樽家です。
probablyは酷かったですね。すいません。
代案ありがとうございます。これで個人的には特に不満ありません。
=end
Updated by mame (Yusuke Endoh) over 14 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
=begin
This issue was solved with changeset r27929.
Masaya, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
=end