正则表达式匹配特殊冒号

Regular Expression match special colon

我有以下字符串:

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 的新手,尝试了很多,但还是不行。

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

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

括号 () 是这里的关键,它使两个组在不在尖括号 <> 内的冒号两侧匹配。

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

以下应该有效:

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

细分:

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

(?![^<]*>)(.*) 为了让第一个冒号被接受,我们进行否定前瞻以确保没有右括号 > without 前面有一个左括号。如果这是真的,我们就知道这个冒号不在括号内。