簡単だと思っていた問題につまずいている
aaa a0a 0a0
変更する必要があるフィールドがありますaaa aoa oa0
私が持っている正規表現は、またはに変更a0a
されていますooa
0a0
oo0
すべての作業を 1 つの正規表現に入れる必要はありません。読みやすくするために、2 つの異なる正規表現で実行してください。
s/^0/o/; # Change 0 to o in first column
s/^(.)0/$1o/; # Change 0 to o in second column
それよりも明確なことは何ですか?
今日のあなたのためにコーディングしているのではなく、明日のあなたと明日の他の人のためにコーディングしていることを忘れないでください。
次のコードは、部分文字列を左辺値として使用します。に変更したい場合は、置換に追加し00a
ますooa
。/g
#!/usr/bin/perl
use warnings;
use strict;
my @ar = qw/aaa a0a 0a0 00a/;
for my $field (@ar) {
substr($field, 0, 2) =~ s/0/o/; # Only applied to the substring!
print "$field\n";
}
次のような表現を使用できます。
s/\b0|(?<=\b\S)0/o/g;
例:
perl -E "$_='aaa a0a 0a0 000'; say; s/\b0|(?<=\b\S)0/o/g; say"
出力:
aaa a0a 0a0 000
aaa aoa oa0 oo0
これでうまくいくと思いますが、正規表現に少し慣れていないので、それがあなたが探しているものでない場合は申し訳ありませんが、すべてうまくいくはずです(これを達成する方法は他にもたくさんあると確信しています)
# replace all zeros providing they are followed by an aplhanumeric character
s/0(?=\w)/o/g;
# same as the above except reverted, replace zeros if not followed by space
s/0(?!\s)/o/g;
# replace 0 followed by word non-boundary
s/0\B/o/g;