Pav*_*ath 1 regex negative-lookahead regex-lookarounds
考虑两种printk函数调用 -
TRACE_BR(TRACE , "END. rc = %d\n", rc );
TRACE_BR(TRACE, "Value = %s", string );
Run Code Online (Sandbox Code Playgroud)
我正在编写一个正则表达式来匹配像上面这样的函数调用,它们%内部包含字符串参数,但如果字符串END也在里面则不应该匹配.
我用这样的负面预测
TRACE_BR\(TRACE.*?(?!END)%.*
Run Code Online (Sandbox Code Playgroud)
我希望这个正则表达式只匹配第二个函数调用,但它也匹配第一个函数调用.
我猜我在贪婪的地方出错了*.
正则表达式应该是:
TRACE_BR\(TRACE(?!.*END).*?%.*
Run Code Online (Sandbox Code Playgroud)
如果END是后面出现的子字符串,则此正则表达式将不匹配该行TRACE.如果想要更精确的匹配,可能需要修改正则表达式.
你可以把正则表达式想象成:在我匹配TRACE(和前面等)之后,从当前位置开始,我想向前看我找不到END子串.
在正则表达式中,如果负前瞻断言之后的字符是%,则断言始终为真,因为END子字符串无法从那里开始; 如果负前瞻断言之后的字符不是%,则正则表达式将无法匹配并回溯.
在你删除的假设情况下,%正则表达式仍然允许带有END的字符串通过,因为任何字符的序列.*?都允许负向前看在沿途的任何位置匹配,并且它只能找到一个位置不是字符串的开头END并匹配它.
| 归档时间: |
|
| 查看次数: |
341 次 |
| 最近记录: |