sample.txt包含
abcde abde
任何人都可以解释以下命令的输出 –
> grep'[[ab]]’sample.txt – 没有输出
> grep'[ab []]’sample.txt – 无输出
> grep'[ab []’sample.txt – 输出为abcde,abde
> grep'[ab]]’sample.txt – 没有输出
[(ab)]和[^(ab)]是什么意思?它与[ab]和[^ ab]相同吗?
解决方法
首先要理解的是,在字符类中,正则表达式的元字符都没有任何特殊含义.它们字面上匹配.例如,*将匹配*并且不代表0或1重复.同样,()将匹配(和),并且不会创建捕获组.
现在,如果在字符类中找到了],则会自动关闭字符类,而另一个字符将不是该字符类的一部分.现在,让我们了解上面发生的事情:
在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.
现在,因为在两个字符串中,最后都没有,因此找不到匹配.
然而,在第3种模式中,您的角色类仅由最后一个关闭].因此,一切都在角色类中.
'[ab[]' means match string that contains 'a',or 'b',or '['
这是完全有效的,并匹配字符串.
And what does
[(ab)]
and[^(ab)]
mean?
[(ab)]表示匹配(,a,b,)中的任何一个.请记住,在角色类中,正则表达式的元字符没有任何特殊含义.因此,您无法在字符类中创建组.
[^(ab)]表示与[(ab)]完全相反.它匹配任何不包含任何指定字符的字符串.
Is it the same as
[ab]
and[^ab]
?
不.这两个不包括(和).因此他们没什么不同.