先ほどUWSCの使用を開始しまして、「超速 Windowsマクロテクニック」という本を読み始めました。
そこで、メモ帳を起動して「hello world.」という文字を入力するマクロを作成して、そのtest.UWSを編集するところがあります。
ACW(GETID("(無題)8 - sakura 2.2.0.1","TextEditorWindowW166"),276,266,1838,1120,0)
BTN(LEFT,CLICK,346,1485,156)
ACW(GETID("(無題)8 - sakura 2.2.0.1","TextEditorWindowW166"),276,266,1838,1120,0)
BTN(LEFT,CLICK,589,1018,172)
KBD(VK_H,DOWN,1406)
KBD(VK_E,DOWN,94)
KBD(VK_H,UP,0)
KBD(VK_E,UP,109)
KBD(VK_L,CLICK,94)
このKBDの行末近くにある数値がミリ秒待つ指定になり、これを5(ミリ秒)に変えましょうとあります。
で、これが何十行もあるので手動で書き換えるのは面倒くさい。なので置換で一気に処理できないかと考えました。
ただ、これを機械的に指定するところでまた悩みました。。
結論から書くと
置換前:「(^KBD\(\D+)(\d+)(\))」
置換後:「${1}5${3}」
となります。
----正規表現の意味----
^ : 行頭
() : グループを意味する。複数ある場合最初の()が1、次の()が2...となる
\( , \): 「(」や「)」を指定するため「\」でエスケープ処理します
\D : 数値以外の文字
+ : 直前の文字(1回以上、最長一致)
\d : 数値
$数値 : 置換後に残したいグループ
--------------------
今回苦しんだのは、2つあって、
(1): ○○を含む行の✕✕を置換したい
(2): 置換後のグループと置換したい数値がバッティング
でした。
(1)は「KBD」を含む行にしないと、関係ない「BTN」などの行も対象になってしまいます。
(2)は「$1」と置換したい「5」という数値が「$15」と認識される
でした。
(1)はグループを分けまくる、(2)は{}で囲むという方法で解決できました。
参考にしたサイト
基本的な正規表現一覧 | murashun.jp
https://murashun.jp/blog/20190215-01.html
正規表現を覚えよう!サクラエディタでの文字列置換(番号指定参照) | キャスレーコンサルティング株式会社
https://www.casleyconsulting.co.jp/blog/engineer/4414/
サクラエディタのヘルプにも記載されてましたね。。ぱっと見で気づかなかった。
後から見て、そういうことかと理解できました。
${n} |
(鬼) (安全な)番号指定参照 後ろにそのまま続けて数字を書くことができます。 |
2020/06/18(木) 追記
グループの値で指定する方法とは別に、名前を定義して置換する方法もありました。
置換前:「(?<test>^KBD.*,)\d+」
置換後:「\k<test>5」
対象文字列の「^KBD.*,」に対して「test」という名前を付ける、「?<test>」を付けます。
置換後の対象名は「\k<test>」が該当します。
これで「\d+」にマッチする数値が5に置換されます。
置換前:
(?<name>式) | (鬼) 名前付き捕獲式集合 |
置換後:
\k<name> | (鬼) 名前指定による後方参照 |
0 件のコメント:
コメントを投稿