2015-10-05 36 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 
相關問題