不包含多个特定单词的字符串的正则表达式
不包含多个特定单词的字符串的正则表达式
我正在尝试编写一个正则表达式,用于查找字符串中不存在特定单词的情况。具体来说,我想知道当 \"trunk\"、\"tags\" 或 \"branches\" 不存在时(这是用于 Subversion 预提交挂钩的),怎么做。根据不包含单词的匹配字符串的正则表达式 的答案,我可以使用负向先行断言轻松地为一个单词执行此操作:
^((?!trunk).)*$
我正在努力解决 \"and\" 运算符的问题,我似乎无法使包括其他两个单词的组合工作。
在 .NET 中单词匹配正常运行:
var exp = new Regex(@"^((?!trunk).)*$"); exp.IsMatch("trunk/blah/blah");
如果第二行路径中不存在 \"trunk\",则会返回 false,否则返回 true。
我在这里错过了什么?
admin 更改状态以发布 2023年5月21日
使用“标准”匹配并查找!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)(/|\\|$))";