我試圖快速找到包含一個術語但缺少另一個術語的所有.java文件。我正在使用MyEclipse 10.7及其「搜索|」文件搜索「功能,該功能支持正則表達式。正則表達式來查找包含一個單詞但不是另一個的文件
在這種情況下,正則表達式會工作嗎?正確的正則表達式會是什麼?
TIA, 史蒂夫
我試圖快速找到包含一個術語但缺少另一個術語的所有.java文件。我正在使用MyEclipse 10.7及其「搜索|」文件搜索「功能,該功能支持正則表達式。正則表達式來查找包含一個單詞但不是另一個的文件
在這種情況下,正則表達式會工作嗎?正確的正則表達式會是什麼?
TIA, 史蒂夫
我能找到工作的唯一解決方案是以下正則表達式:
^(?!.[\s\S]*MISSING_TERM).[\s\S]*INCLUDED_TERM.*$
它發現每一個文件,其中包括INCLUDED_TERM
,但缺乏MISSING_TERM
,無論行。
關鍵是\s\S
,它確保搜索整個文件,而不是每一行。
(?m)\A(?=.*REGEX_TO_FIND)(?!.*MISSING_REGEX.*).*\z
正則表達式可以得到有點棘手,但它分解成兩個部分。
我有這表明你要如何找到在文本字connectReadOnly
,並無法找到disconnect
一個例子HERE。由於該文本包含connectReadOnly
,因此它開始尋找下一個作品,未找到disconnect
。由於disconnect
在文本中,它在整個字符串上失敗(您需要爲整個文件匹配)。如果你玩第二塊,否定部分(?!.*disconnect.*)
,你可以將它設置爲你需要的任何正則表達式。在我的示例中,我不想在我的代碼中的任何位置找到disconnect
:)您可以輕鬆地用您的單詞替換該單詞以進行搜索,甚至可以使用更復雜的正則表達式來「找不到」。
關鍵是使用多行模式,該模式使用開頭(?m)
設置,然後使用字符串字符的開始/結束。使用^
和$
開始/結束一行,其中\A
和\z
開始和結束一個字符串,從而擴展整個文件的匹配。
編輯:對於connectReadOnly
和disconnect
問題用途:(?m)\A(?=.*connectReadOnly)(?!.*disconnect.*).*\z
。更新的例子可以找到here。
這似乎很接近,但仍然返回一些誤報(例如包含這兩個詞的文件)。這是我嘗試的表達式,但返回包含這兩個詞的文件: (?m)^(?=。* connectReadOnly)((?! disconnect)。)* $ 我的目標是找到具有' connectReadOnly'在任何行上,但缺少術語'斷開連接'。 – Fred 2013-03-05 02:37:31
@SAL已對此答案進行了更改,請嘗試一下......現在應該可以使用:) – Walls 2013-03-05 19:59:57
這也不起作用。我想知道是否Eclipse中的正則表達式解析器與你正在使用的不同? 我在找到各種來源提示後找到的作品是:^(?!。[\ s \ S] * disconnect)。[\ s \ S] * connect。* $ – Fred 2013-03-06 01:07:51
您可以使用類似:
(?<!.*bar)foo(?!.*bar)
如果「foo」被發現,但將匹配「酒吧」不是。
注意:您必須配置使用正則表達式多搜索引擎(EX:記事本+ +有一個叫做一個選項「相匹配換行。」),因爲通常的點代表任意字符除了換行符。
如果你想找到它的單行線,像這樣使用:
^(?!.*MISSING_TERM).*INCLUDED_TERM.*$
您還可以使用\
作爲轉義字符,因爲你可能需要像class\.variable
。
實際上,我在另外一個問題上提出了這個問題,但是我被低估爲雷電。這就是爲什麼我回答你的問題。我相信這個信息應該堅持在計算器上。除此之外,我非常傷心。 – leventunver 2017-04-20 10:37:32
非常好的答案(y)。 Viva住broda。 – 2017-05-17 20:48:15
就像一個魅力。 – 2014-09-03 07:09:45