正则表达式匹配特殊冒号

时间:2015-06-13 03:43:24

标签: regex nsregularexpression

我有以下字符串:

string x = "abc<ee:dd>\r\nHERE:we<pp>xq:zxcv<qq>";

我想写一个正则表达式来查找不在:块中的第一个<>

理想情况下,我想在第一个:

之前和之后获取部分

那是:

string y ="abc<ee:dd>\r\nHERE"

string z = "we<pp>xq:zxcv<qq>"

如何匹配第一个:之前的部分?

我是Regex的新手并尝试了很多,但它仍然无法正常工作。

2 个答案:

答案 0 :(得分:0)

正则表达式很棘手......你不仅要知道要匹配什么,还要知道什么是不匹配的。对于这种情况,我在https://regex101.com/测试了这个表达式并得到了预期的结果:

^(.*<.*>.*):(.*)$/U

括号()是此处的关键,可以在冒号的两侧匹配两个不在有角度括号内的组&lt;&gt;。

答案 1 :(得分:0)

因为NSRegularExpressions没有可变长度的后视,我们需要有点创意。

以下内容应该有效:

(.*?):(?![^<]*>)(.*)

故障:

(.*?):匹配所有字符,直到第一个冒号

(?![^<]*>)(.*)为了接受第一个冒号,我们会做一个否定的预测,以确保没有右括号> 没有一个左括号面前。如果事实证明这是真的,我们知道这个冒号不在括号内。