記事閲覧

− 野ざらし言 −

5263 最短マッチング

文太 2023/01/03(Tue) 23:32 [5262]へのコメント
\(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 だと思います。

関連記事一覧ツリー (▼ を押すとツリー全体を一括表示します)

- 5188.真剣マクロ(tag_rplp.def) - 文太 22/12/10-12:03

返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

おなまえ :
Eメール :
タイトル :
メッセージ: 通常モード(推奨)  整形モード(非推奨)  preモード(空白再現)
※ プログラムコード等を含まない場合は,できるだけ通常モードをご利用ください。

参照先 :
暗証キー: (英数字で8文字以内) プレビューなし


- 以下のフォームから自分の投稿記事を修正・削除することができます -

処理 記事No. 暗証キー