我有一个要在Visual中搜索的特定模式。
基本上,我想搜索包含await但在语句末尾缺少ConfigureAwait的行。
我有一些在regex测试器中工作的模式,比如regex101.com,但是在Visual搜索中无法让这些模式工作。例如,模式(?s)^(.)*(await)((?!ConfigureAwait).)*(.)?(;)。
我做错什么了?
编辑-我想在我的项目中找到行,例如
await DoSomeCoolThings(x, y); (即缺少ConfigureAwait(...).)
但我不想得到这样的线路匹配:
await DoSomeCoolThings(x, y).ConfigureAwait(false);
发布于 2016-04-19 07:12:20
如果await和ConfigureAwait的顺序无关紧要,那么您可以使用
(?=.*\bawait\b)(?!.*\bConfigureAwait\b)否则,如果您认为ConfigureAwait应该在await之后,您可以使用
(?=.*\bawait\b(?!.*\bConfigureAwait\b))有效解
(?=\bawait\b(?!.*\bConfigureAwait\b))发布于 2016-04-19 07:09:02
要将这些行与await匹配,但之后不使用ConfigureAwait,可以使用更简单的基于负前瞻性的regex:
.*\bawait\b(?!.*\bConfigureAwait\b).*该模式将所有非换行符(.*)与整个单词await (因为\b是单词边界)进行匹配,然后执行检查,以确保在await之后的某个地方没有完整的单词ConfigureAwait (具有可查找性的(?!.*\bConfigureAwait\b)),然后行的其余部分与.*匹配。

由于await通常接近字符串的左侧,所以最好在开头使用惰性点匹配:
.*?\bawait\b(?!.*\bConfigureAwait\b).*发布于 2018-02-26 13:47:07
我不认为我们应该被限制为一行,因为更复杂的语句可以分成多行。而且,解决方案最好是快速的。
为此,我们可以使用Resharper插件"ConfigureAwait检查器“,也可以使用以下正则表达式:
\bawait\b(?![^;]*ConfigureAwait)[^;]*;这样做的目的是找到“等待”这个词,然后阅读整个语句直到分号;,只有当"ConfigureAwait“这个词在文本中缺失时才匹配。更具体而言:
\bawait\b:整个单词“等待”。(?!...):负面展望,我们将使用它来排除已经有ConfigureAwait的匹配。[^;]*ConfigureAwait:单词"ConfigureAwait",前面有许多不是分号的字符。
[^;]*:任何不是分号的字符。在语句包含查询字符串(带有分号)或lambda (带有分号)的情况下,我得到了一些小错误。他们很容易被忽视,以至于我觉得不值得再让判决复杂化。
https://stackoverflow.com/questions/36710724
复制相似问题