[英]Can't understand this regex format (Phone number)
我必須根據此正則表達式設置電話號碼的格式:
/^\\+([0-9]){1,3}\\.([0-9]\\ ?){6,14}$/
對於我的一生,我無法弄清這下半場。 我盡最大的努力
([0-9]\\\\ ?)
6-14次迭代 如果到目前為止我是對的,我無法弄清楚#4的格式。 還是我完全錯了?
假設我有這個電話號碼:+0018005551212或18005551212
我將如何形成這個號碼? 答案會很好,但解釋會更好。 謝謝!!!
不,很有可能\\\\
是一個轉義的\\
,因為其中存在另一個將檢測轉義字符的解釋層。 使用雙引號字符串時,您經常會在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
這是您當前正則表達式的解釋,以及可以匹配的一些示例。
^ 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\
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.