【发布时间】:2009-08-06 00:16:09
【问题描述】:
我的正则表达式技能很差,而且大多数时候它们让我觉得自己很愚蠢。有人可以帮忙吗?
这个问题更关心的是更好地掌握正则表达式而不是从泥汤中提取信息的工作,所以如果我对 mediawiki 模板系统的理解有缺陷,我真的不介意。我很快就会发现它。
我正在解析 MediaWiki 标记,并且正在尝试获取 MediaWiki 模板名称。这些用类似的东西表示:
{{模板名称|其他内容
或
{{模板名称}}
如果 # 紧跟大括号:
{{#其他事情
我想忽略它。
所以...
我想匹配 2 个大括号 {{ 后面不跟 # 直到下一次出现 | (管道)或 }}(2 个结束卷曲)
所以:
{{我是一只青蛙|其他一些东西 匹配
{{#我是一只青蛙|其他一些东西 失败
这里是垃圾{{Monkey}}bla bla 匹配
这里是垃圾{{#Monkey}}bla bla 失败
等等……
以下正则表达式涵盖了这一点(我认为):
\{{2}(?!\#)(.*?)(?:\||\}\})
但也匹配:
这里有一些东西 {{{Giraffe|oijq
如果不完全是 2 个左花括号,我该如何让它失败?
编辑:.net 正则表达式,顺便说一句
【问题讨论】:
-
您正在做的事情有点像正则表达式的舒适区。你可以做到,但你最终会付出很多努力,以至于你可能想要创建一个轻量级的解析器。这样,当您安装新语法并嵌套它们时,您最终不会陷入困境
-
{{{blah}}} 应该呈现什么或结果是什么?
-
我知道。正则表达式真的很糟糕,但我需要从文档中获取的信息量非常小,我需要快速处理它们,所以我真的无法解析。