正規表現で作るワンライナーライフゲーム
- 5. 正規表現とmanaten
入社して半年くらい
JS厨なので、replaceとクロージャを組み合
わせるのが割と好き
var date = new Date(0);
"Y-m-d H:i:s".replace(/[YmdHis]/g, function(s) {
return {
Y: date.getFullYear(), m: date.getMonth(),
d: date.getDate(), H: date.getHours(),
i: date.getMinutes(), s: date.getSeconds()
}[s];
).replace(/¥d+/g, function(s) {
return s.length === 1 ? '0' + s : s;
}); // "1970-00-01 09:00:00"
- 6. 正規表現とmanaten
最近
グルーピングして$nで参照して置換するのが
便利!
プログラム中より、エディタでよく使う
ピカチュウ,でんき,
フシギダネ,くさ,どく
"ピカチュウ" : [ "でんき", "" ],
"フシギダネ" : [ "くさ", "どく" ],
s/^([^,]*),([^,]*),([^,]*)$/"$1" : [ "$2", "$3" ],/g
- 18. 正規表現による実装
生存/死亡ルールの適応
s/a ( *# *){3}b/#/
生存マス3つに囲まれた死亡マスを生存に置換
s/a#( *# *){2,3}b/#/
生存マス2つまたは3つに囲まれた生存マスを生存
に置換
s/a[^b]*b/ /
それ以外だったら、死亡に置換
- 22. ぜんたいか
先読み・後読み を使う
Perlなどで使用可能
マッチさせるパターンの前後の文字列を指定
マッチさせてないのにグルーピング出来る!
s/(?<=([ #]{3})[ #¥n]{8}([ #]))([ #])(?=([ #])[ #¥n]{8}
([ #]{3}))/a$3$1$2$4$5b/g
- 23. ぜんたいか
先読み・後読み を使う
Perlなどで使用可能
マッチさせるパターンの前後の文字列を指定
マッチさせてないのにグルーピング出来る!
s/(?<=([ #]{3})[ #¥n]{8}([ #]))([ #])(?=([ #])[ #¥n]{8}
([ #]{3}))/a$3$1$2$4$5b/g
先読み
後読み
先読みの中で
グルーピング
- 25. 完成
cat lifegame.txt |
perl -0777 -pe 's/(?<=([ #]{3})[ #¥n]{8}([ #]))([ #])(?=([ #])
[ #¥n]{8}([ #]{3}))/a$3$1$2$4$5b/g' |
perl -pe 's/a( ( *# *){3}|#( *# *){2,3})b/#/g' |
perl -pe 's/a[^b]*b/ /g' |
tee lifegame.txt