[ruby-dev:40359] trunk \w match

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

[ruby-dev:40359] trunk \w match

WATANABE Tetsuya
渡辺哲也です。

Trunk の \w のマッチが漢字で動作していないようです。

$ ruby -v
ruby 1.9.2dev (2010-02-09) [i686-linux]
------- サンプルコード
kstr = "漢字コードEUC"

if kstr =~ /^(\w+)/
  p $1
end
------- 実行結果
$ ruby -Ke /tmp/j.rb
$

Reply | Threaded
Open this post in threaded view
|

[ruby-dev:40360] Re: trunk \w match

Yukihiro Matsumoto
まつもと ゆきひろです

In message "Re: [ruby-dev:40359] trunk \w match"
    on Tue, 9 Feb 2010 15:42:14 +0900, WATANABE Tetsuya <[hidden email]> writes:

|Trunk の \w のマッチが漢字で動作していないようです。

Sun Aug 16 00:30:33 2009の変更で \d, \s および \w がASCIIの
範囲で動作するように変更になってます。[ruby-dev:39026]ですね。
ただ、ここで議論されていたのは \d だけなんですが、その他につ
いても「Perlに合わせる」という判断がされたようです。

よね > 成瀬さん。

個人的には \w と \s は悪影響が少ないと思いましたが。

Reply | Threaded
Open this post in threaded view
|

[ruby-dev:40361] Re: trunk \w match

WATANABE Tetsuya
渡辺哲也です。

情報ありがとうございます。

仕様変更なのですね。了解しました。

\d の数字の場合のマッチの記述量はすくないので
書き換えは楽なのですが、\w については、漢字コード
によって連続しているような書き方が不適当になると
思われるので、どう代用していいか悩みます。

なにかいいアイディアがあるかたがいましたら教えて
ください。

\w を漢字コードのマッチすることを期待する場合の
代用コードとして

[漢字コードの最初-漢字コードの終わり]

などがあります。EUC-JP などはこれで書けなくも
ないのですが、他の漢字コードで利用したい人も、
この記述がそのまま使えるでしょうか?


2010年2月9日16:44 Yukihiro Matsumoto <[hidden email]>:
> まつもと ゆきひろです
>
> In message "Re: [ruby-dev:40359] trunk \w match"
>    on Tue, 9 Feb 2010 15:42:14 +0900, WATANABE Tetsuya <[hidden email]> writes:
>
> |Trunk の \w のマッチが漢字で動作していないようです。
>
> Sun Aug 16 00:30:33 2009の変更で \d, \s および \w がASCIIの
> 範囲で動作するように変更になってます。[ruby-dev:39026]ですね。

Reply | Threaded
Open this post in threaded view
|

[ruby-dev:40362] Re: trunk \w match

NARUSE, Yui-2
成瀬です。

2010/2/9 Yukihiro Matsumoto <[hidden email]>:

> まつもと ゆきひろです
>
> In message "Re: [ruby-dev:40359] trunk \w match"
>    on Tue, 9 Feb 2010 15:42:14 +0900, WATANABE Tetsuya <[hidden email]> writes:
>
> |Trunk の \w のマッチが漢字で動作していないようです。
>
> Sun Aug 16 00:30:33 2009の変更で \d, \s および \w がASCIIの
> 範囲で動作するように変更になってます。[ruby-dev:39026]ですね。
> ただ、ここで議論されていたのは \d だけなんですが、その他につ
> いても「Perlに合わせる」という判断がされたようです。
>
> よね > 成瀬さん。
>
> 個人的には \w と \s は悪影響が少ないと思いましたが。

そうですね。
3つセットで決めるものだと思っていて、¥d だけ ASCII にというのは考えもしませんでした。
今考え直しても、一部だけ戻すのは混乱のもとに思います。

なお、yugui さんが 1.9.1 の初期のパッチリリースで ¥d ¥s ¥w が Unicode 志向なのは
バグだと判断したため、最新のパッチリリースでは ASCII 志向に差し替わっています。

2010/2/9 WATANABE Tetsuya <[hidden email]>:

> 情報ありがとうございます。
>
> 仕様変更なのですね。了解しました。
>
> \d の数字の場合のマッチの記述量はすくないので
> 書き換えは楽なのですが、\w については、漢字コード
> によって連続しているような書き方が不適当になると
> 思われるので、どう代用していいか悩みます。
>
> なにかいいアイディアがあるかたがいましたら教えて
> ください。
>
> \w を漢字コードのマッチすることを期待する場合の
> 代用コードとして
>
> [漢字コードの最初-漢字コードの終わり]
>
> などがあります。EUC-JP などはこれで書けなくも
> ないのですが、他の漢字コードで利用したい人も、
> この記述がそのまま使えるでしょうか?

この文章からでは真に期待するものが何か判断しかねますが、
¥p{Alphabetic} とか ¥p{Ideographic} あたりが求めるものなんじゃないかと思います。

/\p{Alphabetic}/ =~ "あ" #=> 0
/\p{Alphabetic}/=~"漢" #=> 0
/\p{Ideographic}/ =~ "あ" #=> nil
/\p{Ideographic}/=~"漢" #=> 0

Unicode 以外もだったら[[:word:]]かな
/[[:word:]]/ =~ "あ".encode("euc-jp") #=> 0

--
NARUSE, Yui
[hidden email]

Reply | Threaded
Open this post in threaded view
|

[ruby-dev:40364] Re: trunk \w match

WATANABE Tetsuya
渡辺哲也です。

解説ありがとうございます。

この辺の仕様が書かれたものはありません
でしょうか? 手持ちのスクリプトを変更するのに
参考にさせていただきたいのです。

書かれている内容から、¥p{Ideographic} は
Unicode しか使えないようですが、EUC-JP
などでは使えるようにならないのでしょうか?
[[:word:]] は Unicode では使えないのでしょうか?

など確認したいことがあるので、すいませんが
よろしくお願いします。


2010年2月9日17:53 NARUSE, Yui <[hidden email]>:

> 成瀬です。
>
> この文章からでは真に期待するものが何か判断しかねますが、
> ¥p{Alphabetic} とか ¥p{Ideographic} あたりが求めるものなんじゃないかと思います。
>
> /\p{Alphabetic}/ =~ "あ" #=> 0
> /\p{Alphabetic}/=~"漢" #=> 0
> /\p{Ideographic}/ =~ "あ" #=> nil
> /\p{Ideographic}/=~"漢" #=> 0
>
> Unicode 以外もだったら[[:word:]]かな
> /[[:word:]]/ =~ "あ".encode("euc-jp") #=> 0

Reply | Threaded
Open this post in threaded view
|

[ruby-dev:40366] Re: trunk \w match

NARUSE, Yui-2
成瀬です。

(2010/02/09 18:33), WATANABE Tetsuya wrote:
> この辺の仕様が書かれたものはありません
> でしょうか? 手持ちのスクリプトを変更するのに
> 参考にさせていただきたいのです。

現状は以下が一番まとまってますかね。
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/doc/re.rdoc?revision=24992&view=markup

> 書かれている内容から、\p{Ideographic} は
> Unicode しか使えないようですが、EUC-JP
> などでは使えるようにならないのでしょうか?

Ideographic とかの定義が Unicode を参照しているのでならないでしょう。
オレオレ定義とかしたくないので。

> [[:word:]] は Unicode では使えないのでしょうか?

こちらはエンコーディング問わず使えます。

--
NARUSE, Yui  <[hidden email]>

Reply | Threaded
Open this post in threaded view
|

[ruby-dev:40374] Re: trunk \w match

WATANABE Tetsuya
渡辺哲也です。

情報ありがとうございます。

Unicode はいろいろ便利になっているんですね。

このドキュメントを参考にさせていただきます。


2010年2月9日20:10 NARUSE, Yui <[hidden email]>:
> 成瀬です。
>
> 現状は以下が一番まとまってますかね。
> http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/doc/re.rdoc?revision=24992&view=markup