惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
TaoSecurity Blog
TaoSecurity Blog
H
Heimdal Security Blog
Help Net Security
Help Net Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Microsoft Azure Blog
Microsoft Azure Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
N
News | PayPal Newsroom
V2EX - 技术
V2EX - 技术
博客园 - 【当耐特】
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Secure Thoughts
C
CERT Recently Published Vulnerability Notes
罗磊的独立博客
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy & Cybersecurity Law Blog
有赞技术团队
有赞技术团队
S
Schneier on Security
S
SegmentFault 最新的问题
Google Online Security Blog
Google Online Security Blog
H
Hacker News: Front Page
The Last Watchdog
The Last Watchdog
Schneier on Security
Schneier on Security
PCI Perspectives
PCI Perspectives
IT之家
IT之家
Project Zero
Project Zero
博客园 - 司徒正美
P
Privacy International News Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Jina AI
Jina AI
Security Latest
Security Latest
Hacker News - Newest:
Hacker News - Newest: "LLM"
腾讯CDC
C
CXSECURITY Database RSS Feed - CXSecurity.com
阮一峰的网络日志
阮一峰的网络日志
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
V
Vulnerabilities – Threatpost
W
WeLiveSecurity
NISL@THU
NISL@THU
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
L
Lohrmann on Cybersecurity

博客园 - Zhenway

Azure SignalR支持replication啦 Azure SignalR总览 定制json序列化 docfx组件介绍--YamlSerialization docfx daylybuild docfx开源啦 docfx组件介绍--MarkdownLite docfx预热中 合并批量请求 一个简单的Linq to TreeNode 在finally中调用一个需要await的方法 当泛型方法推断,扩展方法遇到泛型类型in/out时。。。 4.5你太黑了,不带这么玩TypeForwardedTo的 一个非常简单的反射加速方案 加载时预防并发执行 又发现一个msdn的坑 又发现个.net framework的坑 sql server死锁神器 踩到一个Emit的坑,留个纪念
今天折腾这么一个正则
Zhenway · 2016-02-16 · via 博客园 - Zhenway

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

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

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

  很久很久以前

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

  一切都很好。

  突然,

  有用户报我们的markdown不对,

  什么情况?

  一问是link的处理有问题。

  是什么奇葩link那?

  打开一看,

  映入眼帘的是:

  marked里面的正则会处理成:

<a href="foo(bar">hello</a>bar).md)

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

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

  再跑到github里面一试,

  傻眼了:

<a href="foo(bar).md">hello</a>

  吐血中。。。

  再试了很多case后,

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

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

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

^                                           start of string
!?                                          '!' 0~1
\[                                          '['
((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)    group 1: text
\]                                          ']'
\s*                                         white spaces
\(                                          '('
\s*                                         white spaces
<?                                          '<' 0~1
(                                           start group 2: link
    (?:                                     start non-capturing group
        [^()]                               any chararacter but '(' or ')'
    |                                       or
        \((?<DEPTH>)                        '(' 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
\)                                          ')'