概要
- 正規表現によるマッチ結果をリスト化する。
- リストコンテキストで /g を付けて評価する。
ソース
-
matchlist.zip
# マッチ結果のリスト化 # リストコンテキストで /g を付けて評価する。 use strict; use warnings; use utf8; use Encode; #my $charsetConsole = 'UTF-8'; my $charsetConsole = 'CP932'; my $charsetFile = 'UTF-8'; binmode( STDIN, ":encoding($charsetConsole)" ); binmode( STDOUT, ":encoding($charsetConsole)" ); binmode( STDERR, ":encoding($charsetConsole)" ); # 次の文字列を「key=val」として分解する # key は空白を含みうる。val は空白を含まない。 # 「t u」はマッチしないので無視される my $line = "aa = bb cc dd= ee ff gg hh= ii jj kk = ll mm=nn o= p q r= s t u"; print "${line}\n\n"; # ペア単位でリスト化した後、key/valに分解。順序は保存される。 foreach my $pair ( $line =~ /[^=]*\S\s*=\s*\S+\s*/g ){ my( $key, $val ) = ( $pair =~ /^([^=]*\S)\s*=\s*(\S+)\s*$/ ); print "key:'${key}'\tval:'${val}'\n"; } print "\n"; # マッチ結果リストをハッシュとして受ける。順序は保存されない。 my %pairs = ( $line =~ /([^=]*\S)\s*=\s*(\S+)\s*/g ); foreach my $key ( keys( %pairs ) ){ print "key:'${key}'\tval:'${pairs{$key}}'\n"; } # EOF
出力結果
aa = bb cc dd= ee ff gg hh= ii jj kk = ll mm=nn o= p q r= s t u
key:'aa' val:'bb'
key:'cc dd' val:'ee'
key:'ff gg hh' val:'ii'
key:'jj kk' val:'ll'
key:'mm' val:'nn'
key:'o' val:'p'
key:'q r' val:'s'
key:'jj kk' val:'ll'
key:'mm' val:'nn'
key:'q r' val:'s'
key:'ff gg hh' val:'ii'
key:'cc dd' val:'ee'
key:'aa' val:'bb'
key:'o' val:'p'