正規表現でマッチした部分を切り出す方法No.05831
swf さん 08/03/12 20:02
 
秀丸エディタ上の文字列、例えば
2008/3/31
から、2008, 3, 31 を切り出して
#y = 2008
#m = 3
#d = 31
とするには、どうすればよいでしょうか?
私は、
searchdown "\([0-9]+\)/\([0-9]+\)/\([0-9]+\)", regular, inselect;
としましたが、正規表現でマッチした部分を変数にセットする方法が分
かりませんでした。

[ ]
RE:05831 正規表現でマッチした部分を切りNo.05833
h-tom さん 08/03/12 20:33
 

h-tom です。

>searchdown "\([0-9]+\)/\([0-9]+\)/\([0-9]+\)", regular, inselect;
>としましたが、正規表現でマッチした部分を変数にセットする方法が分
>かりませんでした。
#タグ付き正規表現の話だと思いますが、括弧が「\」でエスケープされて
#いるので、タグと認識されていないような・・・。

エディタ上でマッチした、全体を取得するには「gettext」と「found〜」
キーワードを使えば出来ますが、タグで指定した範囲を取得することは
出来ないです。

マッチした全体を取得して、
・自前で分割。
・hmjre.dllの正規表現関数つかって、タグの位置を取得する。
という方法が考えられます。

[ ]
RE:05831 正規表現でマッチした部分を切りNo.05834
Iranoan さん 08/03/12 20:42
 
 swf さん今日は、Iranoan です。
> searchdown "\([0-9]+\)/\([0-9]+\)/\([0-9]+\)", regular, inselect;
> としましたが、正規表現でマッチした部分を変数にセットする方法が分
> かりませんでした。
 お使いのヴァージョンが解りませんが、最近のものなら HmJre.dll の DLL
関数を使えばよいと思います。
 具体的には、次の要領です。
//--------------------------------------------------------------------
searchdown "\([0-9]+\)/\([0-9]+\)/\([0-9]+\)", regular;
$s = gettext( foundtopx, foundendy, foundendx, foundendy );
loaddll "HmJre.dll";
#tmp = dllfunc( "FindRegular", "\([0-9]+\)/\([0-9]+\)/\([0-9]+\)", $s );
call GetValue $s, 1;
#y = ##return;
call GetValue $s, 2;
#m = ##return;
call GetValue $s, 3;
#d = ##return;
endmacro;

GetValue:
  return val( midstr( $$1, dllfunc( "GetLastMatchTagPosition", ##2 ),
  dllfunc( "GetLastMatchTagLength", ##2 ) ) );

[ ]
RE:05834 正規表現でマッチした部分を切りNo.05836
swf さん 08/03/13 11:02
 
質問者の swf です。

h-tomさん、Iranoanさん コメントをありがとうございます。
Iranoanさんのコードを使わせていただいて、
やりたいことができました。 

[ ]