我正在编写一个类来解析一个项目真正小的降价式语言。
语法说>123
或>Text
是块引用,而>>123
(仅数字)是一种特殊的链接。
问题是,我的正则表达式匹配> 123和>> 123。我正在尝试构建两个只匹配自己语法的表达式,并拒绝另一个。
仅匹配特殊链接,捕获号码:
/>>(\d+)/gi
>>123 [MATCH]
>>Text [NO MATCH]
>123 [NO MATCH]
>Text [NO MATCH]
Works like it should.
仅匹配blockquote,捕获文本/数字:
/[^>]>(.*)/gi
>>123 [NO MATCH - I don't know why!]
>>Text [MATCH - Shouldn't]
>123 [MATCH - OK]
>Text [MATCH - OK]
Doesn't works.
上一个例子的预期结果:
>>123 [NO MATCH]
>>Text [NO MATCH]
>123 [MATCH]
>Text [MATCH]
如何构建它以忽略double>字符并捕获字母数字文本?
答案 0 :(得分:1)
这可以解决这个问题吗?
(?<=[^>]>)[^>]+\b
https://regex101.com/r/yK5aO4/1
如果您只关心匹配表达式而不是获取字母数字部分,则可以删除lookbehind并以此结束:[^>]>[^>]+\b
。
答案 1 :(得分:0)
如果您使用Python或PHP,您可以添加一个lookbehind来检查>
之前发生的事情。例如,在>
之前禁止其他>
:
(?<!<)<
其中(?<!...)
是负向的后观断言,意思是“不在前面”(在后面(或前瞻)中由子模式匹配的内容不会在整个匹配结果中返回。它们只是检查。 )
如果>
必须从一行的开头开始,你不需要一个lookbehind,你只能使用一个锚点(标记换行符的位置):
^>[0-9]+
(使用带有Python的re.MULTILINE
或re.M
标志或带有PHP的m
修饰符
使用这些元素,您将能够编写自己的模式。
答案 2 :(得分:0)
您可以将正则表达式与起始锚点和multiline
(m)标志一起使用:
'/^>([^>]\S*)/'
{{3}}
[^>]
是为了确保我们不匹配>>