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

15 浏览
0 Comments

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

我正在尝试编写一个正则表达式,用于查找字符串中不存在特定单词的情况。具体来说,我想知道当 \"trunk\"、\"tags\" 或 \"branches\" 不存在时(这是用于 Subversion 预提交挂钩的),怎么做。根据不包含单词的匹配字符串的正则表达式 的答案,我可以使用负向先行断言轻松地为一个单词执行此操作:

^((?!trunk).)*$

我正在努力解决 \"and\" 运算符的问题,我似乎无法使包括其他两个单词的组合工作。

在 .NET 中单词匹配正常运行:

var exp = new Regex(@"^((?!trunk).)*$");
exp.IsMatch("trunk/blah/blah");

如果第二行路径中不存在 \"trunk\",则会返回 false,否则返回 true。

我在这里错过了什么?

admin 更改状态以发布 2023年5月21日
0
0 Comments

使用“标准”匹配并查找!IsMatch

var exp = new Regex(@"trunk|tags|branches");
var result = !exp.IsMatch("trunk/blah/blah");

为什么人们喜欢让自己的生活变得困难?

啊...请记住ass原则!http://www.codinghorror.com/blog/2008/10/obscenity-filters-bad-idea-or-incredibly-intercoursing-bad-idea.html

所以最好写成:

var exp = new Regex(@"\b(trunk|tags|branches)\b");

但如果您确实需要一个负数预查表达式,并保持ass原则

var exp = new Regex(@"^(?!.*\b(trunk|tags|branches)\b)";

测试者:http://gskinner.com/RegExr/?2uv1g

我要注意,如果您正在寻找完整路径(由/\分隔的单词),则

var exp = new Regex(@"^(?!.*(^|\\|/)(trunk|tags|branches)(/|\\|$))";

测试者:http://gskinner.com/RegExr/?2uv1p

0
0 Comments

使用一个负面的向前查看来肯定输入中没有这三个单词之一:

^(?!.*(trunk|tags|branches)).*$

我还稍微重新排列了你的正则表达式来纠正小错误。

0