2011-11-20 74 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