首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >消极展望未来

消极展望未来
EN

Stack Overflow用户
提问于 2012-12-03 14:49:11
回答 1查看 347关注 0票数 1

考虑两种printk类型的函数调用-

代码语言:javascript
复制
TRACE_BR(TRACE ,    "END. rc = %d\n", rc );

TRACE_BR(TRACE, "Value = %s", string );

我正在编写一个正则表达式来匹配像上面这样的整个函数调用,这些调用在字符串参数中包含%,但是如果字符串END也在其中,则不应该匹配。

我像这样使用了负向先行

代码语言:javascript
复制
TRACE_BR\(TRACE.*?(?!END)%.*

我希望这个正则表达式只匹配第二个函数调用,但它也匹配第一个函数调用。

我想我在贪婪的*部分上出了问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-03 15:15:00

正则表达式应该是:

代码语言:javascript
复制
TRACE_BR\(TRACE(?!.*END).*?%.*

如果END是出现在TRACE之后的子字符串,则此正则表达式将不匹配该行。如果想要更精确的匹配,可能需要修改正则表达式。

您可以将正则表达式想象为:在我匹配TRACE (前面的and等)之后,从当前位置看,我希望向前看,我找不到END子字符串。

在您的正则表达式中,如果负前瞻断言后的字符是%,则断言始终为真,因为END子串不能从那里开始;如果负前瞻断言后的字符不是%,则正则表达式将无法匹配并回溯。

在假设删除%的情况下,正则表达式仍然允许带有结尾的字符串通过,因为任何字符.*?的序列将允许负向先行匹配沿途的任何位置,并且它只能找到字符串END的开头以外的位置并进行匹配。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13678450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档