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

1

2

$ 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 []+ 可以匹配到左中括号,无法匹配右中括号:

1

2

3

$ echo "String[] args" | grep -Eo "[0-9a-zA-Z []+"

String[     (这一行是匹配到的结果)

 args       (这一行是匹配到的结果)

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

其他情况的输出结果:

1

2

$ echo "String[] args" | grep -Eo "[0-9a-zA-Z []]+"

[]      (这一行是匹配到的结果)

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

1

2

$ echo "String[] args" | grep -Eo "[]0-9a-zA-Z []+"String[] args(这一行是匹配到的结果)$ 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 }{]+

1

2

3

4

5

$ 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, {}[]+ 都可以。

中括号中的 ] 在前,[在后,即 ][

大括号 { }先后没有关系。

1

2

3

4

5

6

7

8

$ 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. Java正则表达式提取字符的方法实例

    正好遇到一个需求需要将字符串中特定的字符全部提取出来,这个如果是按常规的字符串处理的话非常的繁琐.于是想到用正则表达式来完成,对java正则表达式提取字符的方式实例感兴趣的朋友一起学习吧 正好遇到一个 ...

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

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

  3. java 中文 正则_Java正则匹配中文的方法实例分析

    本文实例讲述了Java正则匹配中文的方法.分享给大家供大家参考,具体如下: 1.匹配双引号间内容: public void test1() { // 匹配双引号间内容 String pstr = &q ...

  4. grep 正则表达式 匹配url

    ★ grep中匹配url的正则表达式 grep -ohr -E "https?://[a-zA-Z0-9\.\/_&=@$%?~#-]*" ./folder 在cygwin ...

  5. java 特殊符号正则_java利用正则表达式处理特殊字符的方法实例

    前言 一串字符串中有特殊符号,可能会影响到相关接口业务,所以需要把字符串中的特殊字符都过滤掉 百度上面搜索大部分处理方法是通过正则表达式, 他需要处理的特殊符号都写进正则表达式中去校验, 这种方式一眼 ...

  6. 【linux】函数grep正则表达式匹配邮箱地址

    这个问题是看了很多文章总结而得,还没有了解shell编程的朋友们可以来看看,自己的一些见解,欢迎指出错误和不足.话不多说,我们直接进入主题! 如何直接用命令匹配邮箱地址? 首先我们要知道常见的邮箱格式 ...

  7. php正则表达式重复出现的相同字母,php正则表达式匹配字符串的重复实例

    则表达式获取字符串的重复情况需要对指定的字符串使用括号()进行分组,但不想让圆括号中的字模式匹配的文本出现在包含匹配文本的数组中,可以使用问号冒号?: 把?:放在第一个圆括号的后面就可以. 例如匹配d ...

  8. 使用正则表达式匹配中括号里的内容

    遇到一个解析任务,需要解析里面的字符串,字符串中含有中括号,琢磨了一段时间,分享如下: 首先是从简单的开始 如: 匹配 abc[123]abc 使用的表达式为 (.*)\[([^\[\]]*)\](. ...

  9. php正则匹配字符_PHP正则表达式匹配字符的方法汇总

    1.字符 对于单个字符,通常按字面意义表示,字符指出其后的字符为特殊字符,所以不做字面意义解释,而解释为特殊字符. 例如/b/相当于字符b,通过在b前面加一个反斜杠,即为//,则该字符变成特殊字符,表 ...

最新文章

  1. struts 2 标签之s:tree/和s:treenode/简单实例
  2. python序列类型-python序列类型种类详解
  3. 详解Node.js包的工程目录与NPM包管理器的使用_node.js
  4. access对比数据_数据仓库系列之数据质量管理
  5. img打 webpack_webpack 打包js中的img路径问题
  6. 华为云回应“关闭私有云”传闻 将进行业务调整形成混合云产品部
  7. 惠普前总裁孙振耀指点职业规划(转帖)
  8. android:EditText属性/去边框
  9. Visual Studio自定义调试窗体两个小技巧
  10. 桌球小游戏(java)编程
  11. 泰迪杯数据分析比赛2018年B题解答
  12. Timer 和TimerTask分析
  13. 删除按升序排列的单链表中的所有重复元素
  14. Apache POI操作Excel文件
  15. 网络工程师的前景如何?未来是怎么样的?
  16. 词频统计(仍需完善版)
  17. pybind11学习 | 在Python中构建编译生成pyd文件
  18. Python去除列表中元素的前后空格和换行
  19. python3爬小说_python3小说爬虫
  20. com.github.abel533.mapper插件使用报错,求助!!!

热门文章

  1. 海思SD3403/SS928V100开发(7)mcp2515-SPI转CAN驱动开发
  2. android编辑图片大小,android中Bitmap图像处理 修改图片大小以及保存时的文件大小...
  3. Visual C++ Tips: 查询计算机主板的序列号
  4. python爬取今日头条后台数据_Python爬虫实战入门五:获取JS动态内容—爬取今日头条...
  5. android低电量模式吗,Android P 省电模式(LowPowerMode)(二) ------ 省电行为
  6. 接口自动化 登录--用例
  7. “华为”和“荣耀”的区别在哪里?一文走进不同的科技品牌
  8. RTX DLSS
  9. LDAP是什么?LDAP与数据库有什么区别?
  10. 图书管理系统的UML建模