regularExpressionWithPattern帮助。我找到了一个破译表达方式

时间:2013-09-19 19:48:13

标签: ios regex nsregularexpression

我很难解读这个表达式:

[[NSRegularExpression regularExpressionWithPattern:@"^([^:]+?):([^:]+?):([^:]+?):(.*)$" options:NSRegularExpressionCaseInsensitive error:nil]

你们中的任何人都可以帮我弄清楚到底在做什么?

我真的很感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

此表达式采用由三个冒号分隔的四部分字符串,例如

quick:brown:fox:jumps

该字符串的唯一要求是必须存在三个冒号,冒号之间(或冒号和字符串的开头/结尾之间)的项目至少有一个非冒号字符,并且内容占据了整个字符串。

该表达式创建了四个捕获组 - 一个用于字符串中每个冒号分隔的元素。

由于非冒号字符类[^:]+?后面总是有冒号,因此可以删除不情愿的量词:

^([^:]+):([^:]+):([^:]+):(.*)$

在没有正则表达式的情况下完成同样的事情的方法是使用componentsSeparatedByString:,并检查您是否得到了正好四个组件:

NSArray *parts = [str componentsSeparatedByString:@":"];
if (parts.length == 4) {
    ... // We've got a good string
}

答案 1 :(得分:0)

前导^表示“行首”。尾随$表示行尾。所以整行必须与之间的匹配。

表达式[^:]表示“除冒号之外的任何字符”。其次是+?,表示“其中一个或多个匹配尽可能少”。

.*表示“零个或多个任何字符”。

parens外面的冒号意味着实际冒号必须在那个字符串中。

parens用于分组。

最后,你的字符串必须是以下形式:

冒号以外的0个或更多字符,然后是冒号,冒号以外的0个或更多个字符,然后是冒号,冒号以外的0个或更多个字符,然后是冒号,然后是0或更多任何类型的字符