1

我很难破译这个表达:

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

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

我会非常感谢你的帮助。

4

2 回答 2

1

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

quick:brown:fox:jumps

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

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

由于非冒号字符类[^:]+?后面总是跟一个冒号,所以可以去掉不情愿的量词:

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

一种无需正则表达式即可完成相同任务的方法是使用componentsSeparatedByString:,并检查您是否获得了准确的四个组件:

NSArray *parts = [str componentsSeparatedByString:@":"];
if (parts.length == 4) {
    ... // We've got a good string
}
于 2013-09-19T20:05:13.910 回答
0

领先的^意思是“线的开始”。尾随$表示行尾。所以整条线必须与两者之间的相匹配。

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

意思是“.*零个或多个任何字符”。

括号外的冒号表示此时实际的冒号必须在字符串中。

括号用于分组。

最后,您的字符串必须采用以下形式:

0 个或多个除冒号之外的字符,然后是一个冒号,0 个或多个除冒号之外的字符,然后是一个冒号,0 个或多个除冒号之外的字符,然后是一个冒号,然后是 0 个或多个任何类型的字符。

于 2013-09-19T20:00:17.067 回答