其他分享
首页 > 其他分享> > 正则表达式-预查

正则表达式-预查

作者:互联网

参考博客

正则表达式 ?<= 和 ?= 的用法 - 雨中上人 - 博客园
在线正则表达式测试

[\s\S]*?
 [\s\S] 意思是匹配所有 空白字符+非空白字符 , 说白了也就是全部字符都可以 * 意思是0个或多个,加个问号为尽量捕捉到更少的字符串

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

#都是非捕获,可以穿插|,又叫预查
(?<=左边是):一边是匹配左边界
(?=右边是):匹配右边界
(?:):中间匹配
(?!):右边不匹配
(?<!):左边不匹配

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

结论:满足一行中左边不匹配xxx字符

(?<!.*?#.*?)<VirtualHost
<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,(?=pattern) 则不包含。如:
对字符串:"industry abc"的匹配结果:

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

标签:字符,匹配,正则表达式,pattern,预查,industr,获取
来源: https://www.cnblogs.com/jinmuqq222/p/14424137.html