昨天在hacker news上看到regex golf,这里可以做几道很有趣的正则表达式的题,做题过程中有的需要用到不匹配这种匹配,比如说我需要匹配不包含某个单词的串。先来看看正则表达式的语法吧。[abc]a或b或c.任意单个字符a?零个或一个a[^abc]任意不是abc的字符\s空格a*零个或多个a[a-z]a-z的任意字符\S非空格a+一个或多个a[a-zA-Z]a-z或A-Z\d任意数字a{n}正好出现n次a^一行开头\D任意非数字a{n,}至少出现n次a$一行末尾\w任意字母数字或下划线a{n,m}出现n-m次a(...)括号用于分组\W任意非字母数字或下划线a*?零个或多个a(非贪婪)(a|b)a或b\b单词边界(a)...\1引用分组(?=a)前面有a(?!a)前面没有a\B非单词边界我们看到,正则表达式中有(?=a)和(?!a)来表示我们是否需要匹配某个东西。所以我们有需要不匹配某样东西的时候我们就可以用(?!a)了。比如说我们要匹配不含hello的字符串就可以这样写。^(?!.*hello)这里.*用来表示hello之前可能有其他的字符,为什么还要加^呢,因为如果不加的话,可能匹配到h之后的这个位置上了。我们现在就可以解决regex golf上的abba这道题了。这道题是让我们去匹配不含abba这种形式的单词,比如abba,anallagmatic就不应该匹配上。所
...
继续阅读
(21)