有人可以解释以下正则表达式的含义:
^ [+]?[0-9] {0,4} []?(\([0-9] {1,6} \))?[0-9()/ - ] {4, } $
这不允许我验证(0049)(0)151-544 / 187 29或(0049)(0)15154418729
我试图调试,我的理解是这个数字存在问题,它有2个开括号和闭括号()。
如果我将(0049)(0)151-544 / 187 29作为(0049)151-544 / 187 29 ,则可行。
有人可以帮忙。
答案 0 :(得分:6)
您的正则表达式^[+]?[0-9]{0,4}[ ]?(\([0-9]{1,6}\))?[0-9 ()/-]{4,}$
表示为
如果您需要group1多次将*
添加到该组
答案 1 :(得分:1)
上面的正则表达式只接受一对括号中的数字,即(),如果你需要多个()来accpet在结束括号之前添加星号(*)符号
使用下面的正则表达式。
^[+]?[0-9]{0,4}[ ]?(\([0-9]{1,6}\)*)?[0-9 ()/-]{4,}$
如果不起作用,则根据需要替换星号
答案 2 :(得分:1)
有人可以解释以下正则表达式的含义
请参阅我提交给您审核的字符串的分解。顺便说一句 - 这是参考文档工作的一个例子,因为在此问题之前我没有尝试过使用NSRegularExpression。感谢您有机会学到新的东西。
^[+]?[0-9]{0,4}[ ]?(\([0-9]{1,6}\))?[0-9 ()/-]{4,}$
注意 - 我的解释直接来自下面参考链接的表1和表2.
^
- 在一行开头匹配
[+]
- [pattern]匹配模式中的任何一个字符。
?
- 匹配零次或一次。喜欢一个。
[0-9]
- [pattern]匹配模式中的任何一个字符。
{0,4}
- 匹配0到4次。匹配尽可能多的次数,但不超过4次。
[ ]
- 匹配模式中的任何一个字符(在本例中为单个空格)
?
- 匹配零次或一次。喜欢一个。
(\([0-9]{1,6}\))
- (...)捕获括号。匹配带括号的子表达式的输入范围在匹配后可用
在该子表达式中,我们看到:
\
- 将以下字符视为文字,抑制任何特殊含义。仅在替换文本中使用反斜杠转义才能获得' $'和' \',但可以在没有不良影响的任何其他角色上使用。
后跟(
,这意味着将左括号视为文字
[0-9]
- [pattern]匹配模式中的任何一个字符。
{1,6}
- 匹配1到6次。匹配尽可能多的次数,但不超过6次。
仍然在我们看到的子表达式中:
\
- 将以下字符视为文字,抑制任何特殊含义。仅在替换文本中使用反斜杠转义才能获得' $'和' \',但可以在没有不良影响的任何其他角色上使用。
后跟)
,这意味着将右括号视为文字
?
- 匹配零次或一次。喜欢一个。 (这似乎是问题,你只匹配零或一次)
[0-9 ()/-]
- [pattern]匹配模式中的任何一个字符。
{4,}
- 至少匹配4次。占有匹配。
$
- 在一行结束时匹配。请参阅表4中的NSRegularExpressionAnchorsMatchLines和m字符表达式。
有关元字符和运算符的进一步说明,请参阅apple documentation on NSRegularExpression Class Reference。
有关\:
的其他说明 \
- 引用以下字符。必须引用被视为文字的字符是*? + [(){} ^ $ | \。 /
有趣的注意事项:
我发现escapedPatternForString方法可以生成一个模式样本,允许用户从一个所需的输出中对转义的模式字符串进行反向工程。它没有完美地输出模式,但确实有助于元字符..
NSString *sample = @"(0049) (0)151-544/187 29";
NSString *pattern = [NSRegularExpression escapedPatternForString:sample];
//Pattern sample: \(0049\) \(0\)151-544\/187 29
NSLog(@"Pattern sample: %@", pattern);