sample.txt 包含
abcde
abde
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释以下命令的输出 -
grep '[[ab]]' sample.txt - 没有输出grep '[ab[]]' sample.txt - 没有输出grep '[ab[]' sample.txt - 输出是abcde,abdegrep '[ab]]' sample.txt - 没有输出又是什么[(ab)]和[^(ab)]意味着什么呢?是不是一样[ab]和[^ab]?
首先要理解的是,在字符类中,正则表达式的元字符都没有任何特殊含义.它们字面上匹配.例如,a *将匹配a *并且不意味着0 or 1重复.同样,()将匹配(和),而且不会产生capture group.
现在,如果]在字符类中找到a,则会自动关闭字符类,而另一个字符将不是该字符类的一部分.现在,让我们了解上面发生的事情:
在1,, 2和4,你的角色类在第一次结束时结束].所以,最后一个结束括号 - ]不是字符类的一部分.它必须单独匹配.所以,你的模式将匹配如下:
'[[ab]]' is same as '([|a|b)(])' // The last `]` has to match.
'[ab[]]' is same as '(a|b|[)(])' // Again, the last `]` has to match.
'[ab]]' is same as '(a|b|])(])' // Same, the last `]` has to match.
^
^---- Character class closes here.
Run Code Online (Sandbox Code Playgroud)
现在,因为在两个字符串中,]最后都没有,因此找不到匹配.
然而,在第3种模式中,您的角色类仅由最后一个关闭].因此,一切都在角色类中.
'[ab[]' means match string that contains 'a', or 'b', or '['
Run Code Online (Sandbox Code Playgroud)
这是完全有效的,并匹配字符串.
又是什么
[(ab)]和[^(ab)]意味着什么呢?
[(ab)]装置匹配任何的(,a,b,).请记住,在角色类中,正则表达式的元字符没有任何特殊含义.因此,您无法在字符类中创建组.
[^(ab)]意思是完全相反的[(ab)].它匹配任何不包含任何指定字符的字符串.
是不是一样
[ab]和[^ab]?
不,这两个不包括(和).因此他们没什么不同.