2011-11-20 73 views
0

我需要一個正則表達式查找類似正則表達式打破

from xyzTableName  with ( index =... 

from xyzTableName  ( index =... 

一個子如果with關鍵字是不是有那麼它應該返回一個匹配,並且如果FROM關鍵字之後存在with,並且(之前存在,則應該不匹配。必須忽略from(之間的所有其他詞。

我試圖與下面的表達式:

@"\bfrom.*[\s\t\n]+(?<!with)[\s\t\n]([\s\t\n]+index" 

和相同的一些變種。當只有正常/單個空格時,我可以解決這個問題。但是當我嘗試使用多個空格和換行符時,它失敗了。

+0

我試圖與@「\ bfrom * [\ S \噸\ n]的+(?<!with)[\ s \ t \ n] \([\ s \ t \ n] + index「但是沒有運氣......我只是錯過了一些東西......我知道我幾乎在那裏,但無法弄清楚..當查詢正常時,它運行良好,但是當我嘗試使用多個空白和換行失敗時,我只是想保持簡單的問題,這就是爲什麼沒有發佈任何東西......我是沒有在家庭工作尋求任何幫助。:) – AjayK

回答

0

嘗試此圖案:\bfrom\b(?!.+\bwith\b)[^(]+\(\s*index

string input = @"from xyzTableName  
with ( index =..."; 
string pattern = @"\bfrom\b(?!.+\bwith\b)[^(]+\(\s*index"; 
bool result = Regex.IsMatch(input, pattern, 
       RegexOptions.Singleline | RegexOptions.IgnoreCase); 

上述返回false。更改輸入以刪除單詞「with」,它將返回true。通過使用RegexOptions.Singleline.元字符將匹配所有字符,包括換行符(\n)。

模式細分:

  • \bfrom\b:究竟這個詞「從」匹配和使用單詞邊界元字符
  • (?!.+\bwith\b):負前瞻檢查「和」,如果它匹配將失敗
  • [^(]+:否定字符類,以匹配任何不是開頭圓括號的字符,至少一次。
  • \(\s*index:匹配左括號(請注意,它必須被轉義),任何空白,則詞 「索引」
+0

Thanx ....它的工作就像一個魅力..感謝一噸。 – AjayK

+0

它的工作,「從xyzTableName與(索引= ...」在這種情況下,預期只是虛假的,這是唯一的主要問題.. – AjayK