c#中的正则表达式,负向后看的表达式
本文关键字:表达式 正则表达式 | 更新日期: 2023-09-27 17:50:13
我想写一个表达式来匹配前面有奇数个问号的单引号。
我发现了一个否定的向后看表达式来匹配单个问号
pattern (?<!'?)'
aaa?'aaa match
aaa'aaaa not match
aaa??'aaa match --wrong
但是我需要的是检测奇数个问号,而不仅仅是一个。
我试着把它像(?<!'?(??))'
一样,但它不起作用。
我要的结果是
aaa?'aaaa match
aaa??'aaaa not match
aaa???'aaaa match
aaa????'aaaa not match
aaa?????'aaaa match
您要查找的正则表达式是(?<=(^|[^?])('?'?)*'?)'
。
让我们打破后面的lookbehind(我把它改成了正的):
(^|[^?]) not a question mark (possibly also start of string, i.e. nothing)
('?'?)* any number of question mark pairs
'? a single question mark
因此,为了使引号匹配,必须在其前面按相反顺序放置这些标记。很明显,对于某些N>= 0,这将强制前面问号的数量恰好为2N + 1。
我认为您不需要使用任何查找来进行此匹配。试试这个:
([^'?]|^)'?('?'?)*([^'?]|$)
检查?
符号是否在非问号符号之间或在字符串开始的末尾。
虽然我不确定会发生什么输入像aaa?????'aaaa??