それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

正規表現の名前付きマッチで、scanf から卒業する

正規表現の名前付きなマッチを覚えました。

>> 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$