首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Grep模糊嵌套方括号

Grep模糊嵌套方括号
EN

Stack Overflow用户
提问于 2013-02-15 09:43:26
回答 2查看 2.4K关注 0票数 4

sample.txt包含

代码语言:javascript
运行
复制
abcde
abde

有谁能解释一下以下命令的输出-

  1. grep '[[ab]]' sample.txt -无输出
  2. grep '[ab[]]' sample.txt -无输出
  3. grep '[ab[]' sample.txt -输出为abcdeabde
  4. grep '[ab]]' sample.txt -无输出

[(ab)][^(ab)]是什么意思?它和[ab][^ab]一样吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-15 09:52:19

首先要理解的是,在字符类中,regex的元字符没有任何特殊的含义。它们确实是相配的。例如,*将与*匹配,而不意味着0 or 1重复。同样,()将与()相匹配,而不会创建capture group

现在,如果在一个字符类中找到一个],这将自动关闭该字符类,并且进一步的字符将不再是该字符类的一部分。现在,让我们了解一下上面发生了什么:

124中,您的字符类以第一个结束]结束。因此,最后一个结束括号- ],不是字符类的一部分.它必须分开匹配。因此,您的模式将匹配如下所示:

代码语言:javascript
运行
复制
'[[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.

现在,由于在这两个字符串中,末尾没有],因此找不到匹配。

然而,在第三种模式中,您的字符类仅由最后一个]关闭。因此,所有东西都出现在字符类中。

代码语言:javascript
运行
复制
'[ab[]' means match string that contains 'a', or 'b', or '['

这是完全有效的,并匹配这两个字符串。

[(ab)][^(ab)]是什么意思?

[(ab)]的意思是匹配任何一个(ab)。记住,在字符类中,regex的元字符没有任何特殊的含义.因此,您不能在字符类中创建组。

[^(ab)]的意思与[(ab)]完全相反。它匹配任何不包含指定字符的字符串。

它和[ab][^ab]一样吗?

不是的。这两项不包括()。因此,它们几乎没有什么不同。

票数 5
EN

Stack Overflow用户

发布于 2013-02-15 10:00:53

我试试看:

代码语言:javascript
运行
复制
grep '[[ab]]' - match string  which has one of "[,a,b" and then a "]" char followed
grep '[ab[]]' - match string  which has one of "a,b,[" and then a "]" char followed
grep '[ab[]'  - match string  which has one of "a,b,["
grep '[ab]]'  - match string  which has one of "a,b" and then a "]" char followed
grep '[(ab)]' - match string  which has one of "(,a,b,)"
grep '[^(ab)]' - match string  which doesn't contain "(,a,b" and ")"
grep '[ab]'    - match string  which contains one of "a,b"
grep '[^ab]' - match string  which doesn't contain "a" and "b"

在本例中,您可以查看那些grep cmds:

代码语言:javascript
运行
复制
#create a file with below lines:
abcde
abde
[abcd
abcd]
abc[]foo
abc]bar
[ab]cdef
a(b)cde

你会看到不同之处,然后用我的评论/解释来思考。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14891871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档