理解 regexp

作者注:
我的文章都很片面,是我按着自己的理解记录的,很可能有错误喔~ 请谨慎参考!请谨慎参考!请谨慎参考!
也非常非常希望您在发现错误了之后联系我, qq:281127500

匹配规则

  1. 从左到右
  2. 从外到内

分组匹配

组内,也就是说一个括号内的匹配,对于整个正则来讲,它只匹配一次。
举个例子:
正则
regexp.MustComplie(`;\s(?i:(m1|m2|m3)(\s*\w*)[\s\)])`)
待匹配字符串
"-#; m1 BJM); m2 SKC ; m3 FEF){}"
匹配结果

可以看到,全匹配 匹配到三组,并且,每一组全匹配里面的 分组匹配 的每一组匹配(略微有点绕口哈~你品你细品)都只匹配一次。这个不是嵌套分组,感觉可能没那么明显,那么下面来一组嵌套分组的例子

可以看到,正则里面有三个分组(那个(?i:)结构是不区分大小写的意思,不要误认为是分组),其中两个是嵌套关系(分组2和分组3),首先是外层(分组2)匹配到“HM NOTE 1”,接着匹配内层分组(分组3),内层分组被外层分组重复利用了多次,但是只能匹配到一次,保存的是最后一次匹配到的值,所以是"hhh"。

假如没有了外层分组, 如下图,可以看到,内层匹配到的也是最后一次保存到的匹配到的值,即"hhh"。

golang 匹配汉字

正则: [\p{Han}]
可以匹配到任何一个汉字