我很难破译这个表达:
[[NSRegularExpression regularExpressionWithPattern:@"^([^:]+?):([^:]+?):([^:]+?):(.*)$" options:NSRegularExpressionCaseInsensitive error:nil]
你们中的任何人都可以帮助我弄清楚到底在做什么?
我会非常感谢你的帮助。
我很难破译这个表达:
[[NSRegularExpression regularExpressionWithPattern:@"^([^:]+?):([^:]+?):([^:]+?):(.*)$" options:NSRegularExpressionCaseInsensitive error:nil]
你们中的任何人都可以帮助我弄清楚到底在做什么?
我会非常感谢你的帮助。
此表达式采用由三个冒号分隔的四部分字符串,例如
quick:brown:fox:jumps
该字符串的唯一要求是必须有三个冒号,冒号之间的项目(或冒号和字符串的开头/结尾之间)至少有一个非冒号字符,并且内容占据整个字符串。
该表达式创建了四个捕获组 - 一个用于字符串的每个以冒号分隔的元素。
由于非冒号字符类[^:]+?
后面总是跟一个冒号,所以可以去掉不情愿的量词:
^([^:]+):([^:]+):([^:]+):(.*)$
一种无需正则表达式即可完成相同任务的方法是使用componentsSeparatedByString:
,并检查您是否获得了准确的四个组件:
NSArray *parts = [str componentsSeparatedByString:@":"];
if (parts.length == 4) {
... // We've got a good string
}
领先的^
意思是“线的开始”。尾随$
表示行尾。所以整条线必须与两者之间的相匹配。
该表达式的[^:]
意思是“除冒号之外的任何字符”。后跟 a+?
表示“其中一个或多个,但尽可能少匹配”。
意思是“.*
零个或多个任何字符”。
括号外的冒号表示此时实际的冒号必须在字符串中。
括号用于分组。
最后,您的字符串必须采用以下形式:
0 个或多个除冒号之外的字符,然后是一个冒号,0 个或多个除冒号之外的字符,然后是一个冒号,0 个或多个除冒号之外的字符,然后是一个冒号,然后是 0 个或多个任何类型的字符。