grep 正则表达式如何匹配中括号?
How grep regex matches square brackets?

文章目录

  • 1. 匹配中括号,例如匹配 `String[] args`
  • 2. 匹配大括号,例如匹配 `{abc 123}`
  • 3. 同时匹配中括号和大括号,例如匹配 `new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}`
  • 4. 总结
  • 5. 参考

1. 匹配中括号,例如匹配 String[] args

$ echo "String[] args" | grep -Eo "[][0-9a-zA-Z ]+"
String[] args       (这一行是匹配到的结果)

(1)grep -E 加上 -E 表示采用正则表达式进行匹配。加 -o 参数,表示只输出匹配到的部分。
(2)正则表达式中,表示 Character class (字符组)的中括号:即下面例子中最外层的中括号,例如 [0-9]+ 匹配一个或多个 0 到 9 的数字,[0-9a-z]+ 匹配一个或多个 0 到 9、小 a 到 小 z 的字符。
(3)在字符组中使用中括号,也就是说在中括号里还有中括号。 匹配中括号 [ ]时,需要把中括号放到字符组的最前面,且] 在前,[在后。(如下面例子中的 [][0-9a-zA-Z ]+

echo "String[] args" | grep -E "[[]0-9a-zA-Z ]+" 这样是不匹配 String[] args 的。

[ 可以匹配到左中括号,例如,这种形式 [0-9a-zA-Z []+ 可以匹配到左中括号,无法匹配右中括号:

$ echo "String[] args" | grep -Eo "[0-9a-zA-Z []+"
String[     (这一行是匹配到的结果)args     (这一行是匹配到的结果)

说明:加 -o 参数,表示只输出匹配到的部分。可以看到只匹配到了 String[,没有右中括号。

其他情况的输出结果:

$ echo "String[] args" | grep -Eo "[0-9a-zA-Z []]+"
[]      (这一行是匹配到的结果)

说明:这个正则表达式 [0-9a-zA-Z [[]]+ 实际被解释为 [0-9a-zA-Z [[]]+ 了。[0-9a-zA-Z [[] 匹配左中括号,接着是 ]+ 匹配右中括号。

$ echo "String[] args" | grep -Eo "[]0-9a-zA-Z []+"
String[] args       (这一行是匹配到的结果)

说明:[]0-9a-zA-Z []+ 是可以匹配 String[] args 的,需要把 ] 放到最前面。[ 放到后面也可以。

注意:一定要加 -o 参数。

2. 匹配大括号,例如匹配 {abc 123}

大括号 { } 在中括号中没有顺序关系。也不用必须放在中括号的最前面。
这几种形式都可以: [}{0-9a-zA-Z ]+[{}0-9a-zA-Z ]+[0-9a-zA-Z {}]+[0-9a-zA-Z }{]+

$ echo "{abc 123}" | grep -Eo "[}{0-9a-zA-Z ]+"
{abc 123}       (这一行是匹配的结果)$ echo "{abc 123}" | grep -Eo "[{}0-9a-zA-Z ]+"
{abc 123}       (这一行是匹配的结果)

3. 同时匹配中括号和大括号,例如匹配 new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}

[][}{0-9a-zA-Z, ]+[][{}0-9a-zA-Z, ]+[]}{0-9a-zA-Z[, ]+[]}{0-9a-zA-Z, []+[]0-9a-zA-Z[, {}]+[]0-9a-zA-Z, {}[]+ 都可以。
中括号中的 ] 在前,[在后,即 ][
大括号 { }先后没有关系。

$ echo "new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}" | grep -Eo "[][}{0-9a-zA-Z, ]+"
new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}        (这一行是匹配的结果)$ echo "new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}" | grep -Eo "[][{}0-9a-zA-Z, ]+"
new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}        (这一行是匹配的结果)$ echo "new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}" | grep -Eo "[]}{0-9a-zA-Z[, ]+"
new byte[]{6, 55, 73, 72, 0, 0x60, 0x77}

4. 总结

(1)匹配字符组中的中括号时(中括号里的中括号),] 需要在最前面,[ 的位置可以放在中间或者最后面。
(2)用 [ 或者 [[ 都可以匹配左中括号。
(3)匹配字符组中的大括号,此时大括号没有特殊含义,所以 { }的位置可以随意一些(但不要破坏其他区间)。

5. 参考

https://stackoverflow.com/questions/30044199/how-can-i-match-square-bracket-in-regex-with-grep

[…] If a bracket expression specifies both ‘-’ and ‘]’, the ‘]’ shall be placed first (after the ‘^’, if any) and the ‘-’ last within the bracket expression.
Therefore, your regex should be:
echo "fdsl[]" | grep -Eo "[][ a-z]+"

grep 正则表达式 如何匹配 中括号相关推荐

  1. grep正则表达式匹配中括号的方法实例

    1. 匹配中括号,例如匹配 String[] args 1 2 $ echo "String[] args" | grep -Eo "[][0-9a-zA-Z ]+&qu ...

  2. grep正则表达式匹配地址、家庭住址

    grep正则表达式匹配地址.家庭住址 项目场景: Linux系统想要扫描包含有地址的文件,可以用grep(或egrep)正则表达式匹配查询.其中 egrep 效果同 grep -E 用于匹配正则表达式 ...

  3. Linux Grep 正则表达式示例

    转载自:Linux Grep 正则表达式示例 grep 是 Linux 中用于文本处理的最有用和功能最强大的命令之一.在本文中,我们将探讨如何在 grep 的 GNU 版本中使用正则表达式的基础,该版 ...

  4. 正则表达式(括号)、[中括号]、{大括号}的区别小结

    正则表达式(括号).[中括号].{大括号}的区别小结 </h1><div class="clear"></div><div class=& ...

  5. grep 正则表达式及选项以及注意

    说明:在原文基础上稍作了修改 grep命令简介: 在ex编辑器(我没用过)中,启动ex编辑器后要查找某个字符串时,在ex的命令提示符后键入: :/pattern/p :/g/pattern/p gre ...

  6. grep 正则表达式

    grep 正则表达式 来源:http://blog.rednet.cn/user1/213546/archives/2007/35795.html 以下为整理的grep 正则表达式的大部分功能,详细参 ...

  7. js php 正则差别,正则表达式(括号)、[中括号]、{大括号}的区别小结,正则表达式小结...

    正则表达式(括号).[中括号].{大括号}的区别小结,正则表达式小结 正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*) ...

  8. 正则表达式的学习二:正则表达式的匹配规则总结

    一.^ 和 $ 的匹配 ^once:这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串:buct$: 这个模式包含了$, 表示该模式只匹配以buct结尾的字符串:^buctser ...

  9. PHP正则表达式怎么匹配多行

    PHP正则表达式怎么匹配多行 一.总结 1.可以用匹配模式修饰符s来使点匹配所有字符,包括换行符. 二.PHP匹配多行的正则表达式分析 代码如下: <table>  <tr>& ...

最新文章

  1. Python培训:Python有哪些函数?你了解几种?
  2. Jquery学习笔记-获取select标签已经选中的值
  3. Adobe Dreamweaver CS3中文版
  4. 前端学习(1032):jquery插件-瀑布流
  5. jdk1.8 ConcurrentHashMap
  6. ie检查服务器证书吊销,浏览器弹出“该站点安全证书吊销信息不可用是否继续”解决方法...
  7. 【文献阅读】Stacked What-Where Auto-encoders -ICLR-2016
  8. C++.Net在Release方式下单步调试时需要修改一些设置,否则变量会有错位或乱码,切记!...
  9. LR.JAVA报表设计器,快速点亮报表设计技能
  10. 数据结构期末作业思路分享——库存管理小程序(云数据库)
  11. pythondjango学生信息管理系统_Django实现学员管理系统
  12. 公安部授权二代身份证阅读器的生产厂家(共十家)
  13. 免费在线pdf转换成word转换器
  14. python面试项目案例
  15. 阿里云主机遭受DDOS攻击IP不能使用如何更换弹性公网IP
  16. 2021自动化保研夏令营汇总
  17. 奇葩面试大赏:四年没见的前女友成了我的面试官
  18. C++ VS OpenGL绘制教室三维立体旋转图像
  19. 知识图谱——Protege(Protégé)配置与使用
  20. 前端的短信验证码如何做(和后端配合)

热门文章

  1. 颈椎病怎么治_得了颈椎病怎么治
  2. UITextView 字数限制,正在输入字符也算进去,区分中英文字符
  3. 我是程序员,想给工作室取名字,来10个给我参考一下,有趣深刻点
  4. 在使用Hanlp配置自定义词典时遇到的问题
  5. Vue + ccropper.js裁切图片(vue-cropper)
  6. C#之SQL数据库操作(源码)
  7. 防暴力营销/论坛群发注册机的插件、安装方法 详细
  8. 信息化建设项目前期方案编写2:经验小结
  9. Jetson TX2挂载SD卡(ext4格式)
  10. python-5-常用模块