[#20392] [BigDecimal] proposal to change specification — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>

斎藤と申します。

25 messages 2003/06/20
[#20407] Re: [BigDecimal] proposal to change specification — "Shigeo Kobayashi" <shigeo@...> 2003/06/22

小林です。

[#20447] [BigDecimal] renaming proposal — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>

斎藤です。

47 messages 2003/06/24
[#20621] Re: [BigDecimal] renaming proposal — "Shigeo Kobayashi" <shigeo@...> 2003/07/11

小林@MAILチェック中です。

[#20628] Re: [BigDecimal] renaming proposal — "Shigeo Kobayashi" <shigeo@...> 2003/07/11

小林です。

[ruby-dev:20313] Re: [Oniguruma] intersection of char class

From: Tanaka Akira <akr@...17n.org>
Date: 2003-06-01 01:18:24 UTC
List: ruby-dev #20313
In article <1054355936.768420.2691.nullmailer@picachu.netlab.jp>,
  matz@ruby-lang.org (Yukihiro Matsumoto) writes:

> |/[a-k&&[c-qz]bcdef]/
>
> これの意味をもう一度説明していただけませんか?

これの Java における説明は
http://java.sun.com/j2se/1.4.1/docs/api/java/util/regex/Pattern.html
にあります。

# これが動く鬼車を使ったわけではないので、以下の記述には鬼車には当ては
# まらない部分もあるかも知れません。

これは端的に言えば、文字集合の共通部分を指示する記法です。また、[] を
自由にネストできるようになります。

&& の優先順位は一番低いので、上の例は括弧を加えて
[[a-k]&&[[c-qz]bcdef]] と書き直せて、[b-k] と同じことになるはずです。
たぶん。
# ただ、奇妙なことに J2SDK 1.4 では g h i j k にマッチしないんですが。

私がこれに強く賛成するのは、これによって文字集合の引き算、つまり X だ
けど Y じゃない、という記述が簡単に (ASCII のコード表を睨まなくても)
書けるようになるからです。例えば、RFC 2616 に次の記述があります。

       token          = 1*<any CHAR except CTLs or separators>
       separators     = "(" | ")" | "<" | ">" | "@"
                      | "," | ";" | ":" | "\" | <">
                      | "/" | "[" | "]" | "?" | "="
                      | "{" | "}" | SP | HT

この any CHAR except CTLs or separators というのが難物です。RFC をみれ
ば CHAR, CTL, separators は次のように書けるのですが、token を書くのは
厄介です。

CHAR: [\0-\177]
CTL: [\0-\037\177]
separators: [()<>@,;:\\"/\[\]?={} \t]

token の any CHAR except CTLs or separators というのを記述するには
CHAR だけど CTL でも separators でもない、というのを書く必要があります。
CHAR だけど CTL じゃないというだけなら上のを見るだけで [\040-\176] と
書けますが、separators でもないというのが入ると、ASCII のコード表と
separators を見比べて、各文字のコードを調べてソートして含まれないもの
の range を求めるという作業が必要になります。これはかなり不毛な作業で
すし、間違いも入りやすいと思います。

したがって、これが
  [[\0-\177]&&[^\0-\037\177]&&[^()<>@,;:\\"/\[\]?={} \t]]
と書けるなら非常に嬉しいわけです。

まぁ、Java に入ったのは (根拠のない推測ですが) Unicode のいろんなプロ
パティを組み合わせたいということなんじゃないかという気がしますが。

あと、Mastering Regular Expressions 2nd Edition にも載っていますが、&&
がなくても、

  (?![\0-\037\177])(?![()<>@,;:\\"/\[\]?={} \t])[\0-\177]

というようにすればなんとか書けます。でも、これは直観的でないように思い
ます。もし、こういう記述でも慣れればよいとすれば、あとは効率の問題なの
で、こういう記述を最適化するというやりかたもあるのかも知れません。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread

Prev Next