perlの正規表現で否定的先読みがある。
検索文字(?!パターン)
どういう効果があるかは「正規表現 後読み 先読み」とかでググると色々な例があるよ。
以降なんとなく正規表現練習。
echo -e ' unused aaaa => bbbb// cccc ,dddd => array() ffff =>array( // gggg ,hhhh =>array( '
以上をLinuxコマンドに「echomatch」として登録。
コマンド自作方法は「shellscript 自作コマンド」でググると大体おk。
LinuxについてはVagrantとVirtualBoxを使って、実験用の仮想環境を作ろう。
私はなんとなく「CentOS 6.5 64bit」を使ってる。
①「unused」は行回避する
②「array(」も行回避する
③コメント部分は回避する
④「=>」の行は一致させる
「=>」行を一致
echomatch | grep -Po --color '^.*=>.*' aaaa => bbbb// cccc ,dddd => array() ffff =>array( // gggg ,hhhh =>array( ,iiii =>array(jjjj) // kkkk
---------------- ---------------- ---------------- ----------------
コメント部分を行回避
echomatch | grep -P --color '(^.*=>[\t ]*)(?!.*//).*' ,dddd => array() ,hhhh =>array(
---------------- ---------------- ---------------- ----------------
コメント行に一致させつつ、コメント部分を回避
echomatch | grep -P --color '(^.*=>[\t ]*).*(?=//)' aaaa => bbbb ffff =>array( ,iiii =>array(jjjj)
---------------- ---------------- ---------------- ----------------
2つを合体させて、コメント部分だけを回避
echomatch | grep -P --color '(^.*=>[\t ]*)(.*(?=//)|(?!.*//).*)' aaaa => bbbb ,dddd => array() ffff =>array( ,hhhh =>array( ,iiii =>array(jjjj)
---------------- ---------------- ---------------- ----------------
「array(」で終わる行を回避
echomatch | grep -P --color '(^.*=>[\t ]*)((?!.*array\()|(?=.*array\(.*\))).*' aaaa => bbbb// cccc ,dddd => array() ,iiii =>array(jjjj) // kkkk
---------------- ---------------- ---------------- ----------------
これも合体させます、「array(」は行削除なので最優先で行います。また、「array()」は削除されないよう、「array(」と同レベルの優先度行います
コメント回避は後ろに置きます。部分回避は大体後ろに置かないと死ぬ。
echomatch | grep -P --color '(^.*=>[\t ]*)((?!.*array\()|(?=.*array\(.*\)))(.*(?=//)|(?!.*//).*)' aaaa => bbbb// cccc ,dddd => array() ,iiii =>array(jjjj) // kkkk
---------------- ---------------- ---------------- ----------------
コメント回避を場合分けで対処するのはエレガントじゃないよね、他に方法思いつかない。
おまけ
なんとなく冬美貼る。
てかソースコードのように書くのめっちゃめんどい。
あとこれプレビュー反応しねえ。
0 件のコメント:
コメントを投稿