正则expression式在iOS上不能正常工作
有人可以请解释下面的正则expression式的含义:
^ [+]?[0-9] {0,4} []?(\([0-9] {1,6} \))?[0-9()/ – ] {4,} $
这不允许我validation(0049)(0)151-544 / 187 29或(0049)(0)15154418729
我试图debugging,我的理解说有一个问题,有2个开放和封闭的括号()。
如果我制作(0049)(0)151-544 / 187 29(0049)151-544 / 187 29 ,这是有效的。
有人可以请帮忙。
你的正则expression式^[+]?[0-9]{0,4}[ ]?(\([0-9]{1,6}\))?[0-9 ()/-]{4,}$
表示为
如果您需要多次将group1添加到该组
上面的正则expression式在单个大括号中只加上数字,例如(),如果你需要多个()来加上星号(*)符号,
改用下面的正则expression式。
^[+]?[0-9]{0,4}[ ]?(\([0-9]{1,6}\)*)?[0-9 ()/-]{4,}$
如果它没有工作取代星号作为您的需要
有人可以请解释下面的正则expression式的含义
看到我分解你提交审查的string。 顺便说一句 – 这是一个参考文档的工作原理,因为在这个问题之前,我没有试过使用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}\))
– (…)捕获圆括号。 匹配后匹配加括号的子expression式的input范围是可用的
在这个子expression式中,我们看到:
– 将下列字符视为文字,压制任何特殊含义。 replace文本中的反斜杠转义只需要'$'和'\',但是可以在任何其他字符上使用而没有不良影响。
其次是(
这意味着把左括号作为一个文字来处理
[0-9]
– [pattern]匹配模式中的任何一个字符。
{1,6}
– 匹配1到6次。 尽可能多匹配,但不能超过6次。
仍然在我们看到的子expression式中:
– 将下列字符视为文字,压制任何特殊含义。 replace文本中的反斜杠转义只需要'$'和'\',但是可以在任何其他字符上使用而没有不良影响。
其次是)
,这意味着把右括号视为文字
?
– 匹配零次或一次。 更喜欢一个。 ( 这似乎是问题,你只在这里匹配零或一次 )
[0-9 ()/-]
– [pattern]匹配模式中的任何一个字符。
{4,}
– 至less匹配4次。 拥有匹配。
$
– 匹配行尾。 请参阅表4中的NSRegularExpressionAnchorsMatchLines和m个字符expression式。
有关元字符和运算符的更多解释,请参阅NSRegularExpression类参考上的apple文档 。
其他说明\:
– 引用下面的字符。 必须引用字符作为文字对待*是? + [(){} ^ $ | \。 /
有趣的注意事项:
我发现,escapedPatternForString方法可以产生一个模式样本,允许从一个需要的输出中反向devise一个转义的模式string。 它不完美的输出模式,但有助于元字符..
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);