我正在尝试整理一个正则表达式来查找字符串中不存在特定单词的时间.具体来说,我想知道何时不存在"trunk","tags"或"branches"(这是Subversion预提交钩子).基于正则表达式匹配不包含单词答案的字符串,我可以使用负面外观轻松地为一个单词执行此操作:
^((?!trunk).)*$
Run Code Online (Sandbox Code Playgroud)
这是我正在努力的"和"运算符,我似乎无法获得包括其他两个单词在内的组合.
这在.NET中运行正常,只有一个单词:
var exp = new Regex(@"^((?!trunk).)*$");
exp.IsMatch("trunk/blah/blah");
Run Code Online (Sandbox Code Playgroud)
它将返回false,因为它当前或如果第二行路径中不存在"trunk",则返回true.
我在这里错过了什么?
Boh*_*ian 80
使用负向前瞻,断言输入中某处的三个单词中没有任何一个:
^(?!.*(trunk|tags|branches)).*$
Run Code Online (Sandbox Code Playgroud)
我还稍微重新安排了你的正则表达式来纠正小错误.
使用“标准”匹配并寻找!IsMatch
var exp = new Regex(@"trunk|tags|branches");
var result = !exp.IsMatch("trunk/blah/blah");
Run Code Online (Sandbox Code Playgroud)
为什么人们喜欢让自己的生活变得困难?
所以最好写
var exp = new Regex(@"\b(trunk|tags|branches)\b");
Run Code Online (Sandbox Code Playgroud)
但如果你真的需要一个消极的表情,并遵守ass原则
var exp = new Regex(@"^(?!.*\b(trunk|tags|branches)\b)";
Run Code Online (Sandbox Code Playgroud)
测试仪:http://gskinner.com/RegExr/ ?2uv1g
我会注意到,如果您正在寻找完整路径(由/或分隔的单词\),那么
var exp = new Regex(@"^(?!.*(^|\\|/)(trunk|tags|branches)(/|\\|$))";
Run Code Online (Sandbox Code Playgroud)
测试仪:http://gskinner.com/RegExr/ ?2uv1p