做百科发那些网站新闻好,网站引导图,wordpress 嵌入字体,给一个网站正则使用不当#xff0c;会导致CPU飙升#xff1b;场景区分#xff0c;是判断存在还是提取内容#xff1b;匹配范围#xff0c;是匹配部分内容还是整行#xff1b; 一、初识正则
正则表达式 – 语法 | 菜鸟教程
sparksql 正则匹配总结
https://www.cnblogs.com/he1m4n… 正则使用不当会导致CPU飙升场景区分是判断存在还是提取内容匹配范围是匹配部分内容还是整行 一、初识正则
正则表达式 – 语法 | 菜鸟教程
sparksql 正则匹配总结
https://www.cnblogs.com/he1m4n6a/p/10256163.html 二、匹配模式 - 贪婪、懒惰、独享
JAVA进阶篇13— 正则表达式的性能优化正则表达式导致CPU飙升
正则表达式的三种模式贪婪模式、懒惰模式、独占模式
贪婪模式 默认模式尝试匹配尽可能多的字符。 常用量词*, , ?, {n,} 等。 场景举例当你想要匹配一个字符串中尽可能长的特定模式时。 例子.* 用于匹配从一个 到下一个 之间的所有内容。
懒惰模式 最小匹配尝试匹配尽可能少的字符。 常用量词*?, ?, ??, {n,}? 等。 场景举例当你想要匹配最短的可能字符串时 例子.*? 用于匹配 和最近的一个 之间的内容。
独享模式 类似于贪婪模式但是一旦匹配就不会回溯。 常用量词*, , ?, {n,} 等。 场景举例当你确定不需要回溯时或者当你想要避免正则表达式中的回溯导致的性能问题时使用独享模式会更高效。 例子.* 用于匹配 之后的所有内容直到字符串结束而不尝试匹配闭合的 。 三、回溯原理 导致性能下降最主要原因 .* 会导致大量回溯| 分支操作 https://zhuanlan.zhihu.com/p/27417442 四、优化正则 优化方向 - 是用于判断存在还是用于提取内容 正则表达式规则越多要匹配的越多性能越差被测串长度越长搜索约耗时性能越差被测数据量越多性能差异约明显预处理减少匹配规则替代正则用非正则函数实现 1. 使用正确的量词 不随意使用或*它会匹配尽可能多的字符这可能导致回溯特别是当模式不匹配时
改用非贪婪量词如 *? 和 ?尤其避免.*、.
用于判断时, .*不要放在规则最后 2. 使用更为精确的字符类 不随意使用.*来匹配字段这个表达式包含了很大的搜索空间容易发生不必要的匹配和回溯导致匹配性能下降 2. 消除不必要的字符组 例如[]简化为 、[0-9]可以简化为\d 3. 锚定匹配位置 使用锚点如 ^ 和 $来指定匹配的开始和结束位置可以减少搜索空间提高匹配效率
使用.*开头的表达式应该在最前面加^例如.*abc vs ^.*abc
“^(?:abc|123)”比“^123|^abc”效率高而“^(abc)”比“(^abc)”效率更高
^(?:aa|bb|cc) 效率高于 ^(aa|bb|cc).* 4. 优化多选结构 尽量避免多选结构a|b|c 优化为 [abc] 提取开头的必需元素 (?:this|that) 优化为 th(?:is|at) 5. 优化捕获组
如果只是为了匹配文本而不关心匹配的具体内容尽量不要使用捕获组;
当要捕获组的时候使用非捕获型括号(?:)因为使用(?:)可以匹配想要的内容但不捕获到组里可以节省资源提高效率
6. 避免使用嵌套的量词 如 (a) 7. 使用非正则函数 如果你的操作可以用字符串处理方法完成比如startsWith、endsWith、contains那么不使用正则表达式通常会更快。 8. 逆向思维 正向判断的正则不好实现是否可以考虑反向的 五、常用工具
regex101: build, test, and debug regex
正则表达式在线测试 | 菜鸟工具 六、性能比对 1. 实际运行任务测试
使用和不使用正则比对多个不同的正则比对 2. 使用正则工具