正则表达式

工具

  网页版正则匹配调试可以用https://regex101.com/r/zFtf4P/1,优点是方便,适用大多数情况,缺点是太大的可能不行,比如日志这种,这时候可以用下载RegexBuddy客户端。


  PCRE2、python、java8三者的正则规则不完全一致,python需要转义,看你最后要用在哪里。下面的List是显示出表达式括号中的东西,用$1、2、3来表示哪个括号的。Match表示第几个匹配项。下面是Group表示括号中的子项。
  设置语言和主题色:

  对于不熟悉的正则规则,我们也可以搜“正则表达式在线测试”,在菜鸟工具看规则。

规则

  正则是完全匹配的,有一个符号不能匹配或者不符合表达式,都不能匹配上。

简单完整匹配

  匹配"last_time_seen"这句话,会把所有匹配的找到



匹配项()

  将括号中的内容变成匹配项

数字匹配

  这里[0-9]匹配数字0-9,+表示匹配可以是多个,同理[A-Za-z0-9]表示匹配所以英文和数字。

任意匹配之中括号[]拓展一

  正如上面所述,[]内的所有东西都能被匹配,但只能是单一字符,所以我们可以用[\&\*\!\^ \%]来匹配中括号中的任意单个字符(甚至是里面的一个空格,除空格外的特殊字符要转义)。

任意匹配之中括号[]拓展二

  [\s\S]表示匹配任意单一字符包括换行符,注意.匹配任意单一字符但不包括换行符。

匹配次数{4}

  {4}表示匹配四个字符,{0,6}表示匹配0-6个,{1,}表示1到无穷个

匹配次数拓展?+*

  • ?表示匹配次数0-1

  • +表示次数≥1

  • *表示次数≥0

  • +*两个的区别在于如果没有对应的字符,+这个是不会匹配的

非贪婪匹配?

  这个符号和匹配次数中的?符号相同,但是非贪婪匹配的?是用在匹配次数和尾部字符之间的。
  这里[\s\S]*能匹配任意长度字符,后面的"000"限制了[\s\S]*的尾部,当存在非贪婪匹配?,遇到第一个"000",[\s\S]*就终止,但如果不加?[\s\S]*则能匹配到最后一个"000"。



多项匹配(?=xxx)(?=yyy)

  这个加了?=的整体就和前后没有关系了,比如有个字符串,里面存在“xxx67yyy”和“yyy75xxx”,那么这两个都会被匹配到,可以看作?=将正则匹配的连贯性打破了,独立成了一个个的整体进行匹配.

分支|

  就是或的意思,这里不详细说了

一个非常实用的结构[\s\S]*?

  这里的?是非贪婪

posted @ 2022-03-23 09:55  阿根的园子  阅读(72)  评论(0)    收藏  举报