我必须根据此正则表达式格式化电话号码:
/^\\+([0-9]){1,3}\\.([0-9]\\ ?){6,14}$/
对于我的生活,我无法弄清楚这一半的后半部分。我最大的努力让我在
([0-9]\\ ?)
如果我到目前为止,我无法弄清楚#4的格式。或者我完全错了?
我想说我有这个电话号码:+0018005551212或18005551212
我如何形成这个号码?答案会很棒,但解释会更好。感谢!!!
答案 0 :(得分: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 :(得分:0)
以下是对当前正则表达式的解释,以及一些可以匹配的示例。
^ 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\