0

電話番号を変更する正規表現を作成しようとしています。+国際番号 (米国以外) の場合は、シンボルを保持したい( %2BURL エンコード後)。国内番号の場合は、%2Bを削除1し、先頭に を付けた 11 桁の形式に変更する必要があります。

4 つの使用例は次のとおりです。

  • %2B2125551000 になります0112125551000(これは、で始まるため、国際番号と見なす必要があります+[2-9]– に置き換え+ます011)
  • %2B12125551000になります12125551000(こちらは+1国内番号ですので を剥がしてください+
  • 212555100012125551000(国内番号としてはありません+)
  • 1212555100012125551000(国内番号としてはありません+)

Linuxでsedを使用してこれをテストしようとしています:

マッチングを行う式は次のとおりです。

((%2B)|)?((1)|)?([0-9]{10})

ただし、必ずしも 5 つの引数すべてが必要なわけではありません。%2B文字列が の場合にのみ保持する必要があり%2B[2-9]ます。

$ for line in %2B2125551000 %2B12125551000 12125551000 2125551000;do echo $line | sed -r 's/^((%2B|))?((1)|)?([0-9]{10})/one:\1   two:\2   three:\3   four:\4   five:\5/';done
one:%2B   two:%2B   three:   four:   five:2125551000
one:%2B   two:%2B   three:1   four:1   five:2125551000
one:   two:   three:1   four:1   five:2125551000
one:   two:   three:   four:   five:2125551000
4

1 に答える 1

0

わかりました、見てみましょう、あなたが望むもの:

s/^%2B(?=[2-9])/011/ || # this will do first rule and change %2B to 011  
s/^%2B(?=1)// ||        # this will do second rule and strip off %2B  
s/^(?:[2-9])/1$&/ ;     # this will do third rule and add 1 to the beginning of the number  

# Perl code 
my @all = <DATA>;

for (@all){
    s/^%2B(?=[2-9])/011/ or 
    s/^%2B(?=1)// or
    s/^(?:[2-9])/1$&/ ; 
    print "line is $_ \n";  
}

__DATA__
%2B2125551000
%2B1125551000
225551000
125551000
于 2012-09-24T21:07:14.587 に答える