正则表达式匹配特殊冒号
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 前面有一个左括号。如果这是真的,我们就知道这个冒号不在括号内。
我有以下字符串:
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 前面有一个左括号。如果这是真的,我们就知道这个冒号不在括号内。