一条正则表达式引发的惨案

本文讲述由于正则表达式引发的性能惨案,背景就是使用 Java 编程语言进行正则表达式匹配,由于正则表达式很复杂,再加上 Java 使用的是 NFA【非确定型有穷自动机】匹配引擎,导致匹配一条文本内容使用了十几个小时还没完成,一直卡住,同时线上环境的主机 CPU 使用率也居高不下【一开始我是猜的,因为我没有权限看,后来问了运维人员,果然是的】。

整理中。

就是这个正则表达式把机器打满了,噪音词匹配,血案:

1
^(\s|\pP|\pS|#[\u4e00-\u9fa5A-Z0-9a-z._-]+#|(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]|\[.{1,4}\]|[0-9a-zA-Z]+| 就是 | 罢了 | 着呢 | 便了 | 已而 | 来着 | 也好 | 着哩 | 不成 | 也罢 | 再说 | 一般 | 而已 | 也 | 不 | 故 | 给 | 的 | 吗 | 家 | 了 | 么 | 呀 | 以 | 吧 | 来 | 哪 | 连 | 而 | 然 | 盖 | 且 | 阿 | 呢 | 啦 | 则 | 哇 | 其 | 哈 | 咧 | 与 | 啊 | 哩 | 乎 | 呗 | 虽 | 惟 | 斯 | 罗 | 价 | 喽 | 维 | 呵 | 般 | 否 | 耶 | 哉 | 罢 | 呕 | 咯 | 嘛 | 噢 | 哟 | 呐 | 焉 | 邪 | 呦 | 啰 | 呸 | 麽 | 嘞 | 矣 | 啵 | 欸 | 唻 | 呃 | 欤 | 噻 | 嘢 | 嚜 |\pP|\pS)*//@([\u4e00-\u9fa5A-Z0-9a-z._-]+).*$

备注

参考文献:

虾丸派 wechat
扫一扫添加博主,进技术交流群,共同学习进步
永不止步
0%