python正则表达式之贪婪引发的匹配无法退出,CPU 100%
2013-03-20 12:31
691 查看
正则表达式:/+{3}/s{4}COMPANY(.|/s)*-{3}/s{4}END
match匹配下面这段字符串可以,
+++ COMPANY 2009-06-06 20:54:02
O&M CMD = COMMAND
SDFL= 2K
--- END
+++ COMPANY 2009-06-06 20:54:02
+++ COMPANY 2009-06-06 20:54:02
O&M CMD = COMMAND
SDFL=3K
--- END
但是,匹配下面这段就出问题了,使用match匹配无法退出,CPU占有率100%
+++ COMPANY 2009-06-06 20:54:02
O&M CMD = COMMAND
SDFL= 2K
--- END
+++ COMPANY 2009-06-06 20:54:02
+++ COMPANY 2009-06-06 20:54:02
O&M CMD = COMMAND
SDFL=3K
========================================
另外,使用 正则表达式:(/+{3}/s{4}COMPANY(.|/s)*-{3}/s{4}END)?
是无法进行最小匹配,即非贪婪匹配的。
上面的正则表达式是贪婪的,/+{3}/s{4}COMPANY(.|/s)*-{3}/s{4}END ,(.|/s)*会进行贪婪的、尽可能多的匹配。(但上面第二个字符串仍有满足条件的字串,即便进行贪婪匹配,但也不至于无法退出啊,CPU占有100%?这一点一直没有想明白)。
解决之道:
把上面的正则表达式改成非贪婪匹配就可以了,/+{3}/s{4}COMPANY(.|/s)*? -{3}/s{4}END,
通过使用?来让re引擎尽可能少的进行匹配。
转自:http://blog.csdn.net/oldsmith/article/details/4248217
match匹配下面这段字符串可以,
+++ COMPANY 2009-06-06 20:54:02
O&M CMD = COMMAND
SDFL= 2K
--- END
+++ COMPANY 2009-06-06 20:54:02
+++ COMPANY 2009-06-06 20:54:02
O&M CMD = COMMAND
SDFL=3K
--- END
但是,匹配下面这段就出问题了,使用match匹配无法退出,CPU占有率100%
+++ COMPANY 2009-06-06 20:54:02
O&M CMD = COMMAND
SDFL= 2K
--- END
+++ COMPANY 2009-06-06 20:54:02
+++ COMPANY 2009-06-06 20:54:02
O&M CMD = COMMAND
SDFL=3K
========================================
另外,使用 正则表达式:(/+{3}/s{4}COMPANY(.|/s)*-{3}/s{4}END)?
是无法进行最小匹配,即非贪婪匹配的。
上面的正则表达式是贪婪的,/+{3}/s{4}COMPANY(.|/s)*-{3}/s{4}END ,(.|/s)*会进行贪婪的、尽可能多的匹配。(但上面第二个字符串仍有满足条件的字串,即便进行贪婪匹配,但也不至于无法退出啊,CPU占有100%?这一点一直没有想明白)。
解决之道:
把上面的正则表达式改成非贪婪匹配就可以了,/+{3}/s{4}COMPANY(.|/s)*? -{3}/s{4}END,
通过使用?来让re引擎尽可能少的进行匹配。
转自:http://blog.csdn.net/oldsmith/article/details/4248217
相关文章推荐
- python非贪婪、多行匹配正则表达式
- python非贪婪、多行匹配正则表达式例子
- python非贪婪、多行匹配正则表达式例子[转载]
- [Python]解决正则表达式的"贪婪"匹配
- python 贪婪和非贪婪、多行匹配正则表达式小结
- Python正则表达式非贪婪、多行匹配功能示例
- (学习)python非贪婪、多行匹配正则表达式例子 分类: 正则表达式 2013-08-19 11:21 2540人阅读 评论(2) 收藏
- (学习)python非贪婪、多行匹配正则表达式例子
- python 正则表达式的贪婪匹配与非贪婪匹配
- (学习)python非贪婪、多行匹配正则表达式例子
- python 正则表达式 贪婪模式的简介和匹配时的几种模式
- 【摘抄】正则表达式的非贪婪匹配
- Java 正则表达式——贪婪匹配、惰性匹配、支配匹配
- python中如何用正则表达式匹配汉字
- 06Python爬虫---正则表达式03之模式修正_贪婪模式与懒惰模式
- Python正则表达式匹配HTML页面编码
- python中 正则表达式匹配一个反斜杠 ‘\’
- 正则表达式-贪婪与非贪婪匹配
- 浅谈php正则表达式中的非贪婪模式匹配的使用
- Python 正则表达式匹配XML1.1的名字