gpt4 book ai didi

regex - 尽管在 Linux 中使用了 "[ ]"(转义序列),但在 egrep 中使用 "\"时获得了特殊的结果

转载 作者:行者123 更新时间:2023-12-01 09:20:16 24 4
gpt4 key购买 nike

最近我在使用正则表达式做一些家庭作业时遇到了以下情况。

s@ubuntu:~$ echo b | egrep []b]
b
s@ubuntu:~$ echo b | egrep [[b]
b
s@ubuntu:~$ echo b | egrep []b[]
b
s@ubuntu:~$ echo b | egrep [b[]
b
s@ubuntu:~$ echo b | egrep [[b]]
s@ubuntu:~$ echo b | egrep [b]]
s@ubuntu:~$ echo b | egrep [b\]]
s@ubuntu:~$ echo b | egrep [b\\]]
s@ubuntu:~$ echo b | egrep [\[b\]]

为什么我在最近 5 个案例中没有打印出“b”?

最佳答案

  • egrep [[b]] — 寻找 b[后跟 ] ;未找到。
  • egrep [b]] — 寻找 b后跟 ] ;未找到。
  • egrep [b\]] — 寻找 b后跟 ] ;未找到。反斜杠被 shell 省略,egrep 看不到。 .
  • egrep [b\\]] — 寻找 b或反斜杠后跟 ] ;未找到。
  • egrep [\[b\]] — 寻找 b[紧随其后的是 ] ;未找到。反斜杠被 shell 省略,egrep 看不到。 .

在一个字符类中(由 [ 开始),第一个 ]终止类(class),除非 ][ 之后的第一个字符, 或 [^ 之后的第一个字符对于否定字符类。请注意 ]不是正则表达式元字符,除非前面有 [使其成为字符类的末尾。您还会发现 $不是字符串中间的元字符,也不是 ^除非它出现在开头,也不是 *也不是 +也不是 ?如果它们首先出现,等等。参见 POSIX Regular Expressions详细讨论——egrep 处理的正则表达式(现在 grep -E )是“扩展正则表达式”。

shell 在 egrep 之前使用反斜杠有机会见到他们。你应该用单引号将你的正则表达式括起来以避免shell改变egrep。看到了。

你可以通过改变回显的内容来展示我的分析:

echo '[b]' | egrep [[b]]
echo '[b]' | egrep [b]]
echo '[b]' | egrep [b\]]
echo '[b]' | egrep [b\\]]
echo '[b]' | egrep [\[b\]]

输出是:

[b]
[b]
[b]
[b]
[b]

[在这些示例中(在回显数据中)出于美观原因而存在;它可以被省略,并且这些行将被接受。

关于regex - 尽管在 Linux 中使用了 "[ ]"(转义序列),但在 egrep 中使用 "\"时获得了特殊的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34374790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com