正则表达式-预查

编辑

参考博客

正则表达式 ?<= 和 ?= 的用法
在线正则表达式测试

常用

[\s\S]?
[\s\S] 意思是匹配所有 空白字符+非空白字符 , 说白了也就是全部字符都可以 * 意思是0个或多个,加个问号为尽量捕捉到更少的字符串
(?<!.
?#.?)\s#.* #匹配以#号或空格+#号起始的行,会去掉空行

(?<!.?#.?)\s[\w\d]. #匹配非#号开头,或者开头空格带#号的行,会去掉空行

(?<!.?#.?)[\w\d].* #匹配非#号起始的行,且会去掉#号开头的行,及去掉单词前的空格,去掉空行

\n\n #匹配空行

((?<!.?#.?)\s[\w\d].|\n\n) #1、匹配非#号开头的行及空行

(?<!.?#.?)listen[\s\S]?(?<!.?#.*?)(?=listen|$) #2、找到listen组

(?<!.?#.?)listen\s+?(.?)\s\n[\s\S]?(?!<.?#.?)bind.?😦\d+)[\s\S]?((?!<.?#.?)server\s?.?\s?(.?)\s?.*?\n)+

. 表示 匹配除换行符 \n 之外的任何单字符

都是非捕获,可以穿插|,又叫预查

(?<=左边是):一边是匹配左边界
(?=右边是):匹配右边界
(?😃:中间匹配
(?!):右边不匹配
(?<!):左边不匹配
[\s\S]+?任意字符
[^}]+? 非}的任意字符

[^#\n]:尽量用非贪婪模式
[^#\n]
?:一行中,中间不匹配,对于想匹配一行左边或者右边不好用
适合:a[^#/n]<VirtualHost ,不适合:[^#/n]<VirtualHost


# 结论:满足一行中左边不匹配xxx字符
- VirtualHost所在行左边不包含#号
```cs
(?<!.*?#.*?)<VirtualHost
<VirtualHost 左边不是(?<!.*?#.*?)

难点-为什么.?[^#/n]?.*?不行

  • .?[^#/n]?.*?<VirtualHost
  • .?[^#/n]?相当于无,最后的.*?又匹配上了#号
  • (?<!.?#.?)来说就是一个整体,所有满足要求

python需要使用regex模块支持零宽断言,re模块不支持

换行符\n

对于读取整个文件之后再匹配,只有一个^和一个$位置
行与行之间多了一个\n

listen runzetoJiangsuZhanghu-prd
        bind 0.0.0.0:9999

正则核心是找到又规律的一组数据,或者说上下重复字符为一组,或者成对出现

listen,得有一个参照物

(?<!.*?#.*?)listen[\s\S]*?(?<!.*?#.*?)(?=listen)   #匹配非#号开头的listen到非#号开头的结尾
(?<!.*?#.*?)listen[\s\S]*?(?<!.*?#.*?)(?=listen|$)

全文匹配正则的一些用法

(?<!.*?#.*?)listen[\s\S]*?(?<!.*?#.*?)(?=listen|$)   #找到listen组
  
(?<!.*?#.*?)\s*#.*      #匹配以#号或空格+#号起始的行,会去掉空行

(?<!.*?#.*?)\s*[\w\d].*   #匹配非#号开头,或者开头空格带#号的行,会去掉空行

(?<!.*?#.*?)[\w\d].*  #匹配非#号起始的行,且会去掉#号开头的行,及去掉单词前的空格,去掉空行

\n\n                 #匹配空行

区别(?=与?:)

  • (pattern) : 匹配 pattern 并获取这一匹配,所获取的匹配可以从产生的 Matches 集合得到。
  • (?:pattern) :匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
  • (?=pattern) :正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

(?:pattern) 匹配得到的结果包含pattern,(?=pattern) 则不包含。如:
对字符串:"industry abc"的匹配结果:

industr(?:y|ies) ---> "industry"    #消耗字符
industr(?=y|ies) ---> "industr"     #不消耗字符

posted @ 2021-02-21 08:45  zxhy哦  阅读(152)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css