2010-07-07 57 views
1

任何機構可以告訴我如何使用正則表達式來否定字符串? 我想找到所有以public class開頭的行,然後any thing except first,second,最後還有別的。如何使用正則表達式否定字符串

例如在結果我期望看到public class base但不是public class myfirst:base 可以任何身體幫助我??

+3

你在寫什麼語言? – SLaks 2010-07-07 16:57:58

+1

你使用的是什麼正則表達式?這是一個非常好的學習正則表達式的資源:http://www.regular-expressions.info/lookaround.html – 2010-07-07 16:59:16

+0

首先,**這是什麼語言? (JavaScript,PHP,C#等)?** 二,發佈的問題存在矛盾。它說你想找到「除第一,第二之外的任何東西」,但你的例子使用「myfirst」!這是什麼? 最後,這個字符串是多行嗎? – 2010-07-07 18:22:36

回答

2

使用負前瞻:

public\s+class\s+(?!first|second).+ 
+0

它沒有返回任何東西 – adra 2010-07-07 16:36:37

+0

@adra:取出'='。 – SLaks 2010-07-07 16:57:41

0

這裏是什麼,應該爲你工作

/public\sclass\s(?:[^fs\s]+|(?!first|second)\S)+(?=\s|$)/ 

第二看頭,就能更改爲$(線結束)或其他錨適用於您的特定用例,例如可能是'{'

編輯:嘗試將最後一部分更改爲:

(?=\s|$) 
+0

它沒有工作niether – adra 2010-07-07 17:33:16

1

其他兩個答案都接近,但可能因不同原因失敗。

public\s+class\s+(?:(?!first|second).)+ 

注意如何周圍有負先行(非捕獲)組,以確保它不僅僅可應用於第一位置更。

,該組是限制較少 - 因爲.排除換行,它的使用,而不是\S$是沒有必要的 - 這將不包括指定的文字和匹配等。

沒有斜槓包裝表達式,因爲這些都不是必需的,可能會混淆那些只遇到基於字符串的正則表達式使用的人。

如果仍然失敗,請發佈錯誤匹配或錯過的確切內容以及您正在使用的語言/ ide。

更新:
原來你使用Visual Studio,它有它自己的special regex implementation,一些深不可測的原因。所以,你會想,而不是嘗試:

public:b+class:b+~(first|second)+$ 

我沒有測試該方式 - 如果它不工作,嘗試丟棄$,但除此之外,你必須找到一個VS用戶。或者更好的是,VS工程師(s)負責這個愚蠢的非標準正則表達式。

+0

unforttunatly,但它沒有返回任何事物niether – adra 2010-07-08 07:02:30

+0

我使用的是c#。 結果爲: 查找全部「public \ s + class \ s +(?:(?! first | second)。)+」,子文件夾,查找結果1,「整個解決方案」 匹配行:0匹配文件:0搜索到的文件總數:13 – adra 2010-07-08 07:41:55

+0

當您搜索'public \ s + class \ s +。+'時,這13個文件中有多少個匹配? – 2010-07-08 09:25:21

3

如果彼得是正確的,你使用Visual Studio的Find功能,這應該工作:

^:b*public:b+class:b+~(first|second):i.*$ 

:b空格或製表符匹配
~(...)是VS如何做一個負前瞻
:i匹配C/C++標識符

其餘部分是標準正則表達式語法:
^ for beginn荷蘭國際集團線
$的線路
.結束的任何字符
*零個或多個
+一個或多個
|的交替

+0

爲了完整起見,您應該將「'| for alternation」添加到第二個鍵。 – 2010-07-08 14:00:38

+0

完成。你知道,在VS正則表達式中實際上有一些好點子。這太糟糕了,它與其他Perl衍生的風格完全不相容。 – 2010-07-08 14:55:35

+0

是的,像':i'這樣的東西看起來確實是一個好主意,但它確實應該以兼容的方式實現,或者標記得更清楚(例如在下拉列表中有「正則表達式(.NET)」和「正則表達式(VS風格)「或其他)。 – 2010-07-08 17:02:51

相關問題