应用场景
- 批量提取、替换有规律的字符串
- 在各种高级文本编辑器的使用
- 在各类办公软件office的使用
- 各种开发语言中的使用(C#、Java、JS、Perl、PHP等等)
- 用户输入的合法性校验(IP地址、特殊的订单号要求等)
- 模板引擎的标签库开发
- 网络爬虫(抓取机器人)的开发
- 批量的文本高效处理
在日常业务开发中经常会涉及到使用正则表达式对数据进行处理,比如String的Split()方法,它根据方法中传入的正则表达式对字符串做分割处理。
抛出问题:在正则表达式匹配过程中,特别是在处理复杂的正则表达式时,Java的Matcher 类可能会执行大量的回溯操作。回溯是正则表达式引擎尝试所有可能的匹配路径,直到找到合适的匹配或确定没有匹配为止,这个过程可能是非常耗时的。
看下面这个例子,给定了一个字符串以及三个功能相同但写法略有区别的正则表达式:
String testStr = "effg";
String regular_1 = "ef{1,3}g";
String regular_2 = "ef{1,3}?g";
String regular_3 = "ef{1,3}+g";