正規表現:同じ文字列の繰り返しNo.00209
Iranoan さん 07/04/04 19:55
 
 秀まるおさん今日は、Iranoan です。
 http://www.maruo.co.jp/hidesoft/4/x05496_.html#5500 からの流れなので
すが、正規表現で同じ文字列の繰り返しはどの様に記述すればよいでしょう?
 感じ 6, 7 文字の繰り返しなら、
([亜-K]{6,7}){2,}
で出来そうな気がするのですが、出来ません。
([亜-K]{6,7})\1+
は期待通りの動作をします。
 こちらの環境は、WindowsXP+IE6.0+秀丸エディタ/秀丸メール+HmJre.dll
Ver. 1.83 です。

[ ]
RE:00209 正規表現:同じ文字列の繰り返しNo.00210
秀まるお さん 07/04/04 21:21
 
 ([亜-K])(\1){5,6}

 がいいかと思いますけど。

[ ]
RE:00210 正規表現:同じ文字列の繰り返しNo.00211
秀まるお さん 07/04/04 21:54
 
 元の発言を見て意味を理解しました。

     ([亜-K]{6,7})\1{1,}

 でいいんじゃないかと思います。

[ ]
RE:00209 正規表現:同じ文字列の繰り返しNo.00212
秀まるお さん 07/04/04 22:02
 
> ([亜-K]{6,7}){2,}
> で出来そうな気がするのですが、出来ません。

 ヒットしない理由が質問だったのでしょうか。だとしたら、これはつまり、

 ([亜-K]{6,7}) というのは最長一致指定なので、この部分を評価すると、た
とえば「南無阿弥陀仏南無阿弥陀仏」に対してマッチングさせると、7文字の文
字列にヒットします。

 その7文字にヒットした後の残りの5文字に対して同じく([亜-K]{6,7})のマ
ッチングをすると、1文字足りないのでヒットしない、ということになります。

 括弧の中に繰り返しパターンがあってその括弧全体がさらに繰り返しになって
る場合はそういう動作になります。

[ ]
RE:00212 正規表現:同じ文字列の繰り返しNo.00213
Iranoan さん 07/04/05 00:33
 
 秀まるおさん今日は、Iranoan です。
>  ([亜-K]{6,7}) というのは最長一致指定なので、この部分を評価すると、た
> とえば「南無阿弥陀仏南無阿弥陀仏」に対してマッチングさせると、7文字の文
> 字列にヒットします。
 なるほど、「()」の内部で最長一致が働くんですね。
 しかし、それでもまだ解らないことがあります。「南無妙法蓮華経南無妙法
蓮華経」に対して、([亜-K]{6,7}){2,} で検索をすると、「南無妙法蓮華経
南無妙法蓮華経」にヒットするのはよいのですが、「無妙法蓮華経南無妙法蓮
華経」にもヒットします。直前の文字列の繰り返しなので、ヒットしてしまう
のがなぜかが良くわかりません。「無」で始まるなら「無妙法蓮華経無妙法蓮
華経」か「無妙法蓮華経南無妙法蓮華経南」でないとヒットしない気がするの
です。
 どちらにしても「困っている」という類の話ではありません(^^;。

[ ]
RE:00213 正規表現:同じ文字列の繰り返しNo.00214
アルビレオ さん 07/04/05 01:09
 
アルビレオです。

> しかし、それでもまだ解らないことがあります。「南無妙法蓮華経南無妙法
>蓮華経」に対して、([亜-K]{6,7}){2,} で検索をすると、「南無妙法蓮華経
>南無妙法蓮華経」にヒットするのはよいのですが、「無妙法蓮華経南無妙法蓮
>華経」にもヒットします。直前の文字列の繰り返しなので、ヒットしてしまう
>のがなぜかが良くわかりません。「無」で始まるなら「無妙法蓮華経無妙法蓮
>華経」か「無妙法蓮華経南無妙法蓮華経南」でないとヒットしない気がするの
>です。

([亜-K]{6,7}){2,} の場合の「直前の文字列の繰り返し」とは ([亜-K]{6,7})
そのもののことであって、([亜-K]{6,7}) にマッチした内容という意味にはな
らないと思います。
たとえば 0x00,0x01,0x02,0x03,... といった文字列を検索するために
(0x[0-9A-F]{2},)+ と書いたのに、「最初に一致した"0x00,"の繰り返し」と解
釈されたら困りますよね。

[ ]
RE:00214 正規表現:同じ文字列の繰り返しNo.00215
Iranoan さん 07/04/05 02:09
 
 アルビレオさん今日は、Iranoan です。
> ([亜-K]{6,7}){2,} の場合の「直前の文字列の繰り返し」とは ([亜-K]{6,7})
> そのもののことであって、([亜-K]{6,7}) にマッチした内容という意味にはな
> らないと思います。
 なるほど、あくまでマッチした内容そのものを使いたいときは、\1,\2,...
を使う必要があるわけですね。

 秀まるおさん、アルビレオさんありがとうございました。

[ ]