正则表达式 – Grep模糊嵌套方括号

前端之家收集整理的这篇文章主要介绍了正则表达式 – Grep模糊嵌套方括号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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] ?

不.这两个不包括(和).因此他们没什么不同.

猜你在找的正则表达式相关文章