Perlのプログラムの中の文字列定義を数えるための正規表現
多分動くはず・・・
というか、qq ah\agea もOKとかびっくりだよ。
もう少しスマートにならないもんか。
# テスト。文字列は9個ある my $string = <<'_X_'; print('hoge :' . "$hoge"); print('aaa => \'aaa\''); print("aaa => 'aaa'"); $hash->{"hoge"}->{q{huga}}->{qq{$moge}}; print qq/"hage"/; print qq ah\agea; _X_ # マッチした文字列を確認 print "$1\n" while($string =~ /( "(?:\\\\|\\.|.)*?" | '(?:\\\\|\\.|.)*?' | q{1,2}\s*\{(?:(?R)|(?:\\\\|\\.|.))*?\} | q{1,2}\s*\[(?:(?R)|(?:\\\\|\\.|.))*?\] | q{1,2}\s*\((?:(?R)|(?:\\\\|\\.|.))*?\) | q{1,2}\s*(\W)(?:(?R)|(?:\\\\|\\.|.))*?\2 | q{1,2}\s+(\w)(?:(?R)|(?:\\\\|\\.|.))*?\3 )/sxg);
'hoge :'
"$hoge"
'aaa => \'aaa\''
"aaa => 'aaa'"
"hoge"
q{huga}
qq{$moge}
qq/"hage"/
qq ah\agea