正则表达式详解以及性能优化建议

首先我们先看正则表达式最关键的几个东西

  • 元字符-具有特殊意义的专用字符
元字符描述
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束
-表示范围
[ ]匹配括号内任意一个字符
* 、+、?量词
  • 量词-量词也算是元字符
限定符代码/语法语法
*重复0次或更多次
+重复1次或更多次
重复0次或1次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

反义词

常用反义语法
\W匹配不是字母或数字或下划线或汉字
\S匹配任意不是空白符的字符
\D匹配不是数字
\B匹配不是单词开头或者借宿的位置
[^x]匹配除了x以外的任意字符

懂了上面的这些东西 还有一个转义符 就是如果要查找元字符本身 就需要加个\

现在我们开始写一个匹配ipv4地址的正则表达式
ip地址最大为255.255.255.255
我们首先去匹配1~255这个区间的数字

我们需要拆分1~255

  • 2开头的

25[0-5] 250~255
2[0-4]\d 200~249

  • 1开头的

1\d\d 100~199
[1-9]\d 10~99

  • 个位

[0-9] 0~9

需要根据匹配优先级去放置匹配参数
先匹配大的数字再匹配小的
那最后我们匹配ipv4的完整的表达式就是
((25[0-5]|2[0-4]\d|1\d\d| [1-9]\d|[0-9]).){3}(25[0-5]|2[0-4]\d|1\d\d| [1-9]\d|[0-9])

优化建议

  1. 使用字符组代替分支条件
    即使用[a-d] 不要使用(a|b|c|d)
  2. 优先选择最左端的匹配结果
  3. 标准量词是匹配优先的 贪婪模式下 量词会尽可能匹配更多的词
  4. 谨慎用点号元字符,尽可能不用星号和加号这样的任意量词
  5. 尽量使用字符串函数处理代替
  6. 合理使用括号
  7. 起始、行描点优化
  8. 量词等价转换的效率差异
  9. 对大而全的表达式进行拆分
  10. 使用正则以外的解决方案
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员若风+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值