.net 不包含多个特定单词的字符串的正则表达式
我试图组合一个正则表达式,以查找字符串中何时不存在特定的单词。具体地说,我想知道什么时候“主干”、“标记”或“分支”不存在(这是针对Subversion预提交挂钩的)。根据答案,我可以很容易地使用否定环顾法对一个词进行此操作:.net 不包含多个特定单词的字符串的正则表达式,.net,regex,.net,Regex,我试图组合一个正则表达式,以查找字符串中何时不存在特定的单词。具体地说,我想知道什么时候“主干”、“标记”或“分支”不存在(这是针对Subversion预提交挂钩的)。根据答案,我可以很容易地使用否定环顾法对一个词进行此操作: ^((?!trunk).)*$ 这是我正在努力解决的“and”操作符,我似乎无法让包括其他两个词在内的组合起作用 这在.NET中运行良好,只需一个词: var exp = new Regex(@"^((?!trunk).)*$"); exp.IsMatch("trunk
^((?!trunk).)*$
这是我正在努力解决的“and”操作符,我似乎无法让包括其他两个词在内的组合起作用
这在.NET中运行良好,只需一个词:
var exp = new Regex(@"^((?!trunk).)*$");
exp.IsMatch("trunk/blah/blah");
如果第二行的路径中不存在“trunk”,它将返回当前状态的false或true
我在这里遗漏了什么?使用否定词,表示输入中没有以下三个词中的任何一个:
^(?!.*(trunk|tags|branches)).*$
我还稍微重新排列了您的正则表达式以更正小错误。使用“标准”匹配并查找!IsMatch
var exp = new Regex(@"trunk|tags|branches");
var result = !exp.IsMatch("trunk/blah/blah");
为什么人们喜欢让生活变得艰难
啊。。。记住ass
原则
所以最好是写
var exp = new Regex(@"\b(trunk|tags|branches)\b");
但是如果你真的需要一个消极的表情,并且遵循ass
原则
var exp = new Regex(@"^(?!.*\b(trunk|tags|branches)\b)";
测试人员:
我要注意的是,如果您正在查找完整路径(用/
或\
分隔的单词),那么
测试员:其中有一个不匹配的开放式括号,假设它是无关的,它不适用于类似“blah/blah/blah”(未返回匹配项)的模式。@TroyHunt Oops-遗漏了一个括号。我测试了它,它对我有效(尽管是用java)。现在试试。@S.Serp因为前瞻不会消耗输入,所以您必须在外部留下一些实际匹配的内容。如果将
*
移动到“向前看”中,只剩下^$
,它实际上不匹配任何内容(即空白),再加上一个“向前看”来匹配任何内容,这是一个不可能的匹配。为什么你不能只进行普通的“搜索”正则表达式并反转结果呢?我只能编辑正则表达式,不是周围的逻辑。谢谢,但不幸的是,本例中的约束要求在正则表达式中完成工作,我无法控制在此之外的代码来反转条件。
var exp = new Regex(@"^(?!.*(^|\\|/)(trunk|tags|branches)(/|\\|$))";