2015-10-05 146 views
0

我想在双引号内找到字符串,但前提是它们在指定函数foo的调用之外使用。例如:匹配句子的正则表达式不以指定的前缀开头

foo("some str1"); // ignore 
foo2("another string"); // need this 
"simple string"; // need this 
foo(L"wide str"); // ignore 
#define NAME "name" // need this 
int i = foo("must be ignored"); // ignore 

我试图\b(?!foo\()L?"[^"]*"\b从这个answer,但它不工作正确的。在另一行上使用结尾双引号。像这样"); // ignore<CR> foo2("

如果我想我应该包括所有格量化。不满足的子串完全排除在进一步搜索之外。但不知道如何正确地做到这一点。

需要在Embarcadero RAD Studio XE中搜索文件,但对Perl regexp语法中的任何决定感到满意。

重要:想要找到所有出现在foo函数之外的双引号字符串的情况。并且不要被foo中的字符串分散注意力。

回答

1

你可以在这里尝试一下:https://regex101.com/r/mG7gP7/1 我匹配两个场景

  • 的功能搜索没有名字FOO,并匹配引号内的字符串。
  • 引号内的任何文本里没有函数调用
+0

好的。是否可以修改表达式以满足最后一行[link](https://regex101.com/r/qC9eB7/1)中的第二个引用词? – alexolut

+0

哼哼...对不起,我不会为你创建的每个用例玩重构游戏。 – Cyrbil

+0

如果你的代码版本被发现引用了一个字符串,而不是所有行都完全一致,我的澄清问题就不会出现。我不幸在示例中无法描述所有可能的选项。要理解这件事的主要原因是需要找到**所有的事件**,而不管它们在一行文本中可能的数量。不管怎么说,还是要谢谢你。 – alexolut

1

你觉得这个怎么样one

/(^(?!foo\()|\)).*"(.*)"/gm 
相关问题