Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 不包含多个特定单词的字符串的正则表达式_.net_Regex - Fatal编程技术网

.net 不包含多个特定单词的字符串的正则表达式

.net 不包含多个特定单词的字符串的正则表达式,.net,regex,.net,Regex,我试图组合一个正则表达式,以查找字符串中何时不存在特定的单词。具体地说,我想知道什么时候“主干”、“标记”或“分支”不存在(这是针对Subversion预提交挂钩的)。根据答案,我可以很容易地使用否定环顾法对一个词进行此操作: ^((?!trunk).)*$ 这是我正在努力解决的“and”操作符,我似乎无法让包括其他两个词在内的组合起作用 这在.NET中运行良好,只需一个词: var exp = new Regex(@"^((?!trunk).)*$"); exp.IsMatch("trunk

我试图组合一个正则表达式,以查找字符串中何时不存在特定的单词。具体地说,我想知道什么时候“主干”、“标记”或“分支”不存在(这是针对Subversion预提交挂钩的)。根据答案,我可以很容易地使用否定环顾法对一个词进行此操作:

^((?!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)(/|\\|$))";