2012-10-16 36 views
0

我想查找一些沒有被任何數字或字母數字包圍或沒有包圍的單詞。 所以,如果我在尋找Foo123我想這個結果不包含數字或字母數字的圖案

="Foo123"; =>TRUE 
barFoo123; =>FALSE 
Foo123 =>TRUE 
BarBar123Foo123Bar; =>FALSE 
;Foo123 =>TRUE 

我剛剛建立了這個表達式:

(^[^0-9a-zA-Z]?)WORDTOFIND([^0-9a-zA-Z]?$) 

我敢肯定,我在正確的道路,但是,當我像這樣使用它:

if (Regex.IsMatch(line, string.Format(@"(^[^0-9a-zA-Z]?){0}([^0-9a-zA-Z]?$)",snCode))) 
{ 
} 

它不起作用。我究竟做錯了什麼?

回答

3

你基本上找

(?<![a-zA-Z0-9])Foo123(?![a-zA-Z0-9]) 

它使用一個前瞻和回顧後,確保沒有一個字母數字字符之前或之後Foo123。儘管如此,這還是採用ASCII。

+1

權,重要的區別是,你說'Foo123'不能由字母數字字符開頭,而不是說必須先由字符串的開始處的可選非字母數字字符組成。你清楚地表達意圖,並且通常會得到很好的結果。 – hvd

+0

這不起作用,但你以前的做法是:(?<=^| [^ a-zA-Z0-9])Foo123(?= $ | [^ a-zA-Z0-9])有人能告訴我什麼是<=? – bAN

+1

不,它的工作原理。 @Joey忘了刪除其中的一個:'(?![^ a-zA-Z0-9])'應該是'(?![a-zA-Z0-9])'。 –

0

以下字符串匹配你不想這麼做!Regex.IsMatch()

(^([0-9a-zA-Z])+{0}.*)|(.*{0}([0-9a-zA-Z])+) 
+0

點#1無關緊要:如果'[a-zA-Z0-9]'爲真,那麼按照定義'[a-zA-Z0-9] +'也是真的。正如@喬伊的回答所證明的,第2點是通過使用負面的lookarounds而不是否定的字符類來解決的。 –

+0

@AlanMoore 1)理解2)決定給我的答案,因爲喬伊的答案在「barFoo123;」上失敗。現在它已被標記爲已被接受。更新了我的答案。 – tilish

相關問題