我正在尝试整理一个正则表达式来查找字符串中存在不的特定单词。具体来说,我想知道何时不存在“trunk”,“tags”或“branches”(这是Subversion预提交钩子)。基于Regular expression to match string not containing a word答案,我可以使用负面外观轻松地为一个单词执行此操作:
^((?!trunk).)*$
这是我正在努力的“和”运算符,我似乎无法获得包括其他两个单词在内的组合。
这在.NET中运行良好,只需一个字:
var exp = new Regex(@"^((?!trunk).)*$");
exp.IsMatch("trunk/blah/blah");
如果在第二行的路径中不存在“trunk”,它将返回false,因为它当前或是真的。
我在这里缺少什么?
答案 0 :(得分:71)
答案 1 :(得分:3)
使用“标准”匹配并查找!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)(/|\\|$))";