テキストとアカウント番号が混在するテキストファイルで機能する正規表現をPerlで作成しようとしています。私がやりたいのは、口座番号を再フォーマットすることです。.*
特定の行に複数の一致がある場合に、アカウント番号のいずれかの側で一致するためにを使用する際に問題が発生しています。いくつか検索しましたが、答えが見つかりませんでした。将来この落とし穴を回避できるように、誰かが私の正規表現の何が問題になっているのかを説明してくれることを期待しています。
while(<>) {
s/(.*)\b([0-9]+)\b(.*)/$1xxx\-$2$3/g;
print;
}
アカウント識別子に置き換えられますが、xxx-
機能するまではx
'sだけです。
私が抱えている問題は、すべてのオカレンスではなく、最後のオカレンスだけが置き換えられることです。
たとえば、単純なサンプルラインの場合:
First Part 223456 Third Part Fourth Part 113456 Fifth Part Sixth Part
私は期待します:
First Part xxx-223456 Third Part Fourth Part xxx-113456 Fifth Part Sixth Part
しかし、私は得るだけです:
First Part 223456 Third Part Fourth Part xxx-113456 Fifth Part Sixth Part
.*
キャプチャグループに他のメタ文字を含めると、問題として絞り込まれますが、ファイルの内容が保証されていないため、すべてを一致させる必要があります。同じ行に複数の口座番号がある場合にのみ発生します。アカウント番号が複数行に表示されている場合は、正常に機能します。
フィードバックをいただければ幸いです