2016-05-27 8 views
0

を理解することはできません:私の人生のためにが、私はこの正規表現に応じて電話番号をフォーマットする必要があり、この正規表現形式(電話番号)

/^\\+([0-9]){1,3}\\.([0-9]\\ ?){6,14}$/ 

を、私はこの後半を把握することはできません。私の最善の努力は

    それは
  1. そして、バックスラッシュで始まる必要があります
  2. で私を持っている1-3桁
  3. その後([0-9]\\ ?)
  4. エンドの
  5. 6-14反復は任意の文字が続く別のバックスラッシュ文字列の

これまでのところ私は#4のフォーマットを理解することはできません。または私は完全に間違っていますか?

はのは、私がこの電話番号を持っているとしましょう:0018005551212または18005551212

どのように私はこの番号を形成するのでしょうか?答えは素晴らしいだろうが、説明がさらに良くなるだろう。ありがとう!!!

+0

は、オート説明については、[この](https://regex101.com/r/dK8aM0/1)を参照してください。 – AKS

+1

私は、バックスラッシュがプラス記号、ドット、およびスペース(それを必要としない)をエスケープするだけであることは確かです。作者は、バックスラッシュ自体をエスケープするのを避けるために、一重引用符を使用することができないことに気づいていないかもしれません: '/^\ +([0-9]){1,3} \([0-9] \? ){6,14} $/'' –

答えて

1

いいえ、すべての可能性では、\\はエスケープ\ですエスケープ文字を検出する別の解釈層があるために必要です。二重引用符で囲まれた文字列を使用するときは、(一例として)bashでこれをしばしばを参照してください。

pax> echo '\' | sed 's/\\/x/' 
x 
pax> echo '\' | sed "s/\\\\/x/" 
x 

pax> echo '\' | sed 's/\/x/' 
sed: -e expression #1, char 6: unterminated 's' command 
pax> echo '\' | sed "s/\\/x/" 
sed: -e expression #1, char 6: unterminated 's' command 

二重引用符で囲まれた文字列、bash自体でsedが今までそれらを見て前にエスケープを解釈し、あなたはダブルエスケープする必要がありますので、 。一重引用符を使用すると、bashは文字列のエスケープを解釈しないため、そのままsedに渡されます。

国際電話番号は+で始まりますが、はありません。にはバックスラッシュが含まれています。

だから、ルールは以下のとおりです。

^     start of string 
\\+     a literal + 
([0-9]){1,3}  1-3 digits 
\\.     a literal . 
([0-9]\\ ?){6,14} 6-14 digits, each with an optional following apace 
$     end of string 
+1

あなたは100%正しいです。私はそれを見逃したのか分かりません。私はこのAPIを誓って1時間かけてこのような馬鹿げた、エスケープされた方法で電話番号を書式設定するよう指示しましたが、実際には+001.8005551212しか必要ありませんでした。新鮮な目に感謝します! – gr8m8

0

ここにあなたの現在の正規表現の説明と、一致するいくつかの例があります。 (私には、電話番号のように見えていない)の例を以下

REGEX EXPLANATION

^     assert position at start of a line 
\\+     matches the character \ literally one or more times 
([0-9]){1,3}  capturing group matching a digit between 1 to 3 times 
\\     matches the character \ literally 
.     matches any character (except newline) 
(     start of another capturing group 
    [0-9]    any digit between 0 to 9 
    \\    matches the character \ literally 
    ?    match a space zero or one time 
){6,14}    repeat this pattern 6 to 14 times 
$     assert position at end of a line 

あなたの現在の正規表現のマッチ:

\1\+9\ 9\ 9\ 9\ 9\ 9\ 
\\\12\79\ 9\ 9\ 9\ 9\ 9\ 
\123\ 9\ 9\ 9\ 9\ 9\ 9\ 
\\124\A9\ 9\ 9\ 9\ 9\ 9\ 
\\124\_9\ 9\ 9\ 9\ 9\9\ 
\\124\_9\ 9\ 9\ 9\ 9\9\ 9\9\9\ 9\9\9\ 
+0

説明と例に何か問題はありますか? downvotingのときには、コメントをつけて答えを向上させてください。 – AKS

+0

しかし、答えのリンクをたどってみると、そうではありません。 – AKS

+0

AKSでは、実際に存在する電話番号の標準はバックスラッシュ文字を使用していません(あなた自身が答えに書いているように)。これは、私の答えによると、1つ以上のバックスラッシュではなく、ダブルエスケープされた '+'を意味します。しかし、私が自分の答えは同様に扱われているので、私は自分の答えが同様に扱われているので、私はあなたに感じます:-) – paxdiablo

関連する問題