正则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添加到该组

<code>在这里输入图片描述</ code>

上面的正则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);