我需要一个正则表达式来查找像这样的子字符串
from xyzTableName with ( index =... 和
from xyzTableName ( index =...如果with关键字不在那里,那么它应该返回一个匹配,如果with存在于FROM关键字之后,(之前,那么应该没有匹配。必须忽略from和(之间的所有其他单词。
我试着用下面的表达:
@"\bfrom.*[\s\t\n]+(?<!with)[\s\t\n]([\s\t\n]+index"以及相同的一些变体。当只有普通空格/单个空格时,我能够解决这个问题。但是当我尝试使用多个空格和换行符时,它失败了。
发布于 2011-11-21 02:15:09
试试这个模式:\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:精确匹配单词"from“,并使用单词边界的索引前视检查”metacharacters(?!.+\bwith\b):“,如果does[^(]+:负字符类匹配任何不是左括号的字符,则匹配将失败,至少索引匹配一个左括号(请注意,它必须转义)、任何空格,然后是单词”once.\(\s*index:“https://stackoverflow.com/questions/8203272
复制相似问题