博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
今天折腾这么一个正则
阅读量:6277 次
发布时间:2019-06-22

本文共 1882 字,大约阅读时间需要 6 分钟。

  今天一天折腾了这么一个正则

new Regex(@"^!?\[((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\s*\(\s*
)|\)(?<-DEPTH>))+?(?(DEPTH)(?!)))>?(?:\s+(['""])([\s\S]*?)\3)?\s*\)");

  话说这个正则是干什么用的,故事是这样的:

  很久很久以前

  我在markdownlite里面抄了个marked里面的正则

  一切都很好。

  突然,

  有用户报我们的markdown不对,

  什么情况?

  一问是link的处理有问题。

  是什么奇葩link那?

  打开一看,

  映入眼帘的是:

[hello](foo(bar).md)

  marked里面的正则会处理成:

hellobar).md)

  确实bar后面都跟)了链接就到处为止了,

  看起来是用户内容有问题啊!

  再跑到github里面一试,

  傻眼了:

  吐血中。。。

  再试了很多case后,

  发现github只要在link target里面的的()是成对出现的就能work。

  于是就有了今天这个正则。

  这个复杂的正则需要这么去理解:

^                                           start of string!?                                          '!' 0~1\[                                          '['((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)    group 1: text\]                                          ']'\s*                                         white spaces\(                                          '('\s*                                         white spaces
) '(' with depth++ | or \)(?<-DEPTH>) ')' with depth-- ) end non-capturing group +? lazy 1~ (?(DEPTH)(?!)) require depth = 0) end group 2: link>? '>' 0~1(?: start non-capturing group \s+ white spaces (['"]) group 3: quote ' or " ([\s\S]*?) group 4: title \3 ref group 3)? end non-capturing group 0~1\s* white spaces\) ')'

转载地址:http://uufva.baihongyu.com/

你可能感兴趣的文章
CCNP-6 OSPF试验2(BSCI)
查看>>
Excel 2013 全新的图表体验
查看>>
openstack 制作大于2TB根分区自动扩容的CENTOS镜像
查看>>
Unbuntu安装遭遇 vmware上的Easy install模式
查看>>
几个常用的ASP木马
查看>>
Mysql-5.6.x多实例配置
查看>>
psutil
查看>>
在git@osc上托管自己的代码
查看>>
JAVA应用小程序(Applet)
查看>>
Mac OS终端提示符前缀”bogon”
查看>>
STL容器类
查看>>
RPA学习-关于读 csv 文件报错问题
查看>>
mac composer 使用
查看>>
PDF怎么测量尺寸
查看>>
改造Dubbo,使其可以对接口方法进行注解配置
查看>>
MySQL默认配置文件位置发生改变后如何查找
查看>>
C#操作数据库
查看>>
我的友情链接
查看>>
配置ELK添加marvel插件
查看>>
Oracle 内存一 手动内存管理,自动内存管理
查看>>