我正在构建一个基于RegEx的Markdown解析器。在使用RegEx查找参考样式的链接标签时,我遇到了一个我的RegEx中的一个错误,我无法看到问题。
鉴于以下Markdown:
[me]: http://example.com
[her]: http://somewhere.com
[1]: http://nhs.net
[2]: http://test.com
[google it]: http://google.com
这个RegEX:
\[(\w+\s?+\w+)\]
我似乎只能检测[我],[她]和[谷歌]但不能检测标签[1]和[2]。我以为\w
应该检测字母和数字字符?
编辑:使用PCRE RegEx解析器
答案 0 :(得分:3)
由于两个\w+\s?+\w+
子模式,\w+
模式至少匹配2个字符。
如果要匹配可选的以空格分隔的单词,请使用
\[(\w+(?:\s+\w+)*)\]
^^^^^^^^^^^
请参阅regex demo
<强>详情:
\[
- 开场[
(\w+(?:\s+\w+)*)
- 第1组:
\w+
- 1 + word chars (?:\s+\w+)*
- 零个或多个序列:
\s+
- 一个或多个空格(如果您使用?
,则会出现1次或0次匹配)\w+
- 1 + word chars ]
- 结束]
(不需要转义)替代正则表达式 - 如果您需要确保[
和]
后跟/前面加上字词char,请使用
\[\b([^\][]+)\b]
\[\b
与字词char之前的[
匹配,([^\][]+)
捕获除[
和]
以及\b]
之外的1个字符匹配单词char之后的]
。
请参阅regex demo
答案 1 :(得分:0)
你的正则表达式与这两个数字不匹配,因为你希望1 +个字符带有\w+
,而另外1+个字符带有\w+
。所以至少有2个字符
此外,您的\s?+
很奇怪。这意味着您需要一个可选的空格,但需要一次或多次。