\(aaa\)bbb\(ccc\)ddd\(eee\)fff ↓ \1bbb\2ddd\3fff アルゴリズム的には進歩なし。 えーと、そこは数えられないっす。ほぼ文字列定数なので、"str" 「最短」は正規表現ですなおに実現できました。技を使っていません。 しかし、こうは言いたい。 見よ、この気持ちの悪い正規表現を!!! くらえっ!!! って誰が食うの? たぶん、分身の術をやったらめったらに使ったバルタン星人だと思う。 ----- t.awk ----- # jgawk -f t.awk t.txt { sub(/\\\([^)\\]+\\\)/,"\\1"); sub(/\\\([^)\\]+\\\)/,"\\2"); sub(/\\\([^)\\]+\\\)/,"\\3"); sub(/\\\([^)\\]+\\\)/,"\\4"); sub(/\\\([^)\\]+\\\)/,"\\5"); sub(/\\\([^)\\]+\\\)/,"\\6"); sub(/\\\([^)\\]+\\\)/,"\\7"); sub(/\\\([^)\\]+\\\)/,"\\8"); sub(/\\\([^)\\]+\\\)/,"\\9"); print } ----------------- C:\>jgawk -f t.awk t.txt \1bbb\2ddd\3fff いちおう書いておきましょうか、明日の自分のために。バルタン正規表現。 1行で十分。2行目以下は反復なので。 /\\\([^)\\]+\\\)/ を "\\1" に置換する。 \\ ;literal \ -- A -- \( ;literal ( あわせて \( [^)\\]+ ;否定 ) でもなく \ でもない。[ ]内でも、\\ で \ \\\) ;-- A -- にほぼ同じ ;literal \ ;literal ) literalはエスケープされましたの意味。 "\\1" ;literal \1 は、""内でもこうなる。awkの本にはよく書いてあります。 たぶん、 2022/07/05 21:25 446,464 gawkw.exe C:\>gawkw -W version ;for Win32 (Japanized) GNU Awk 3.1.5 あたりでは実装されていると思いますが、ふつうのawk (jgawk)で使う、sub(), gsub() 以上に強力な、gensub()というのがあり、ここでは、タグ付き置換ができるはずです。 GNU extention だと思います。
関連記事一覧ツリー (▼ を押すとツリー全体を一括表示します)
返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
- 以下のフォームから自分の投稿記事を修正・削除することができます -