正規表現の名前付きなマッチを覚えました。
>> ret = '直通特急 阪神梅田行 18:29 発 3番のりば'. match(/(?<type>.+) (?<dest>.+)行 (?<dep_time>.+)発 /) => #<MatchData "直通特急 阪神梅田行 18:29 発 " type:"直通特急" dest:"阪神梅田" dep_time:"18:29 "> >> puts ret[:type] => "直通特急"
名前付きマッチの後方参照はとても楽しい!!便利!!これで scanf みたいなレガシーとバイバイできそう
php でも動いた
<?php $str='直通特急 阪神梅田行 18:29 発 3番のりば'; $regex= "/(?<type>.+) (?<dest>.+)行 (?<dep_time>.+)発 /"; preg_match( $regex, $str , $matches ); var_dump($matches);
実行結果
takuya@orm$ php test.php
array(7) {
[0]=>
string(39) "直通特急 阪神梅田行 18:29 発 "
["type"]=>
string(12) "直通特急"
[1]=>
string(12) "直通特急"
["dest"]=>
string(12) "阪神梅田"
[2]=>
string(12) "阪神梅田"
["dep_time"]=>
string(6) "18:29 "
[3]=>
string(6) "18:29 "
}
bash でも出来ないか?
できなかった。
takuya@orm$ regex='(?<name>.+)'; [[ "aaaaaaa aaaaaaaaaa" =~ $regex ]];echo "${BASH_REMATCH[0]}"
takuya@orm$