「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@436) [低] [解決]
@436■ (#1373) 正規表現の数量子「n回」の指定を使うと正常に動作しない。 - serica (2009-12-16 15:09) /低 未処理
■挨拶──────────────────────────
初めまして。sericaと言うものです。
なでしこを始めて1年程なので
公式バイブル片手に四苦八苦しつつ
楽しくプログラミングさせて貰っています。


特定記号「{}」の動作で
バグかと思う所があるので報告させて頂きます。

勘違いでしたら申し訳ありません。
先に謝らせて頂きます。
あと文章を簡潔に書くのが苦手なので長文になってしまいますが
ご容赦下さい。

【症状】
■症状──────────────────────────
「AB4321CD34EF」の様な文字列を
「~~{n}」の形で正規表現マッチしようとしても、
「」内での{}を変数指定として動作してしまうらしく、
数量子として認識されない事。

■推測──────────────────────────
変数nが存在すればその内容が適用され、
変数nが存在しない場合は{}を除いた文字列として扱われる模様。
{}は全角でも半角でも同じ?みたい。

■備考──────────────────────────
そして{n,}や{n,m}はエラー。
{,}や{,n}の形のはエラーではないのですが…
{n,}や{n,m}の形だとnとmが数字でも文字でもエラーが返ります。

─────────────────────────────



【再現方法】
■サンプルソース─────────────────────
C=3
サンプル=「AB4321CD34EF」
サンプルを「[0-9]{2}」で正規表現マッチ
それを言う

■再現手順────────────────────────

幾つか試したパターンを纏めた物です。
「AB4321CD34EF」を対象にした正規表現マッチの例に成ります。
 ────────────────────────────
 例)n桁のアルファベットにマッチしたい時。
 
 「[A-Z]{2}」表記は「[A-Z]2」と同じで
 「アルファベット1字&2」を探しマッチしない。
 
 「[A-Z]{4}」表記は「[A-Z]4」と同じで
 「アルファベット1字&4」を探し「B4」がマッチする。
 
 ────────────────────────────
 例)n桁の数にマッチしたい時
 
 「[0-9]{2}」表記は「[0-9]2」と同じで
 「数1字&2」を探し「32」がマッチする。
 
 「[0-9]{4}」表記は「[0-9]4」と同じで
 「数1字&4」を探し「34」がマッチする。
 
 ────────────────────────────
 例)nの指定がアルファベット(数量子としては規定外?)の場合
 
 「[0-9]{EF}」表記は「[0-9]EF」と同じで
 「数1字&E1字&F1字」を探し「4EF」がマッチする。
 
 また変数をC=3と宣言した場合は
 「[0-9]{C}」表記は「[0-9]3」と同じで
 「数1字&3」を探し「43」がマッチする。
 
 「[0-9]C」表記は(当たり前ですが)
 「数1字&C1字」を探し「1C」がマッチする。
 
 Cという変数が無い場合は
 「[0-9]{C}」表記は「[0-9]C」と同じ
 「数1字&C1字」を探し「1C」がマッチする。
─────────────────────────────


【要望】
■解決案?────────────────────────
詳しくないので単純な案しか考えられないのですが

「{n}」の場合
「n=数字」なら変数じゃないハズ→数量子。
「n≠数字」なら数量子じゃないハズ→変数。

「,」が入る事も考えると
{}内の先頭=数字なら変数じゃないハズ→数量子。
{}内の先頭≠数字なら数量子じゃないハズ→変数。
とか…こんな形でしょうか

と分別出来そうなので自動識別が理想的かと思っています。
ただ処理的には重くなるのかな…とおもうと今一つ…


他は
①{}が全角なら変数、半角なら数量子。
②「」中の変数指定(「」の文字列扱いへのエスケープ?)に他の記号を使う。
③数量子n回の指定に他の記述方法を使う。

等が可能そうですがどれも
ソースの互換性を損ないそうですし、

知識も経験も乏しいのでロクに思いつきませんでした。
ごめんなさい。
─────────────────────────────


【バージョン】
■バージョン───────────────────────
バージョンが1.5324で確認。
他に過去版から1.0系、1.3系、1.4系を適当に1つずつDLして
各2パターンくらい試して同様の症状。

■PC環境─────────────────────────
OS:WindowsXP_SP3
CPU:Intel_E8500
─────────────────────────────


【その他】
■別な要望ですが─────────────────────
IME制御がスピンエディタとかで使えないのが不便。
IME制御を可能して欲しい。
─────────────────────────────

(#1375) RE:正規表現の数量子「n回」の指定を使うと正常に動作しない。 - 粗茶 (2009-12-16 17:23) /低 未処理
「[0-9]{2}」としたい場合は、展開無しの括弧『』を使う。
({}は半角にして下さい。)

サンプルを『[0-9]{2}』で正規表現マッチ

「[0-9]{C}」(Cは変数)としたい場合は、

サンプルを『[0-9]{』&C&『}』で正規表現マッチ


これで正しく動きませんか?

(#1376) 余談 - とおりすがり (2009-12-16 17:46) /低 未処理
>■推測──────────────────────────
>変数nが存在すればその内容が適用され、
>変数nが存在しない場合は{}を除いた文字列として扱われる模様。

変数nが存在しない場合は、おそらく変数nが文字列として作成され、それが展開されていると思われ。変数nの内容は変数名と同じ文字列「n」でしょう。
それが、なでしこの基本動作だからそう思っただけですが。

本命の問題については粗茶さんの解決法でいいでしょう。
僕のは余談です

(#1388) 仕様を知らず困る事が多い。 - serica (2009-12-29 22:15) /低 解決
勘違いだったのですね。改めて申し訳ありません。
返答ありがとうございます。
(返信書いたともりだったのですが…書き込めてなかった申し訳ないです。)

『』を使うソースは見かけた記憶はあるのですが、変数の展開をさせない記述なんですね。
手元にあるのが公式バイブルなのですが使う項目のページだけ見るような感じなのでその他の部位は直ぐ忘れてしまって…お恥ずかしいです。

今後は先ず質問板で聞いてから書くことに致します。


(#1373)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能