在 Java 中使用正则表达式解析 wikiText
给定一个 wikiText 字符串,例如:
{{ValueDescription
|key=highway
|value=secondary
|image=Image:Meyenburg-L134.jpg
|description=A highway linking large towns.
|onNode=no
|onWay=yes
|onArea=no
|combination=
* {{Tag|name}}
* {{Tag|ref}}
|implies=
* {{Tag|motorcar||yes}}
}}
我想在 Java/Groovy 中解析模板 ValueDescription
和 Tag
。 我尝试使用正则表达式 /\{\{\s*Tag(.+)\}\}/
,它很好(它返回 |name
|ref
和 |motorcar||yes
),但是 /\{\{\s*ValueDescription(.+)\}\}/
不起作用(它应该返回上面的所有文本)。
预期输出
有没有办法跳过正则表达式中的嵌套模板?
理想情况下,我宁愿使用简单的 wikiText 2 xml 工具,但我找不到类似的东西。
谢谢! 穆隆
Given a wikiText string such as:
{{ValueDescription
|key=highway
|value=secondary
|image=Image:Meyenburg-L134.jpg
|description=A highway linking large towns.
|onNode=no
|onWay=yes
|onArea=no
|combination=
* {{Tag|name}}
* {{Tag|ref}}
|implies=
* {{Tag|motorcar||yes}}
}}
I'd like to parse templates ValueDescription
and Tag
in Java/Groovy.
I tried with with regex /\{\{\s*Tag(.+)\}\}/
and it's fine (it returns |name
|ref
and |motorcar||yes
), but/\{\{\s*ValueDescription(.+)\}\}/
doesn't work (it should return all the text above).
The expected output
Is there a way to skip nested templates in the regex?
Ideally I would rather use a simple wikiText 2 xml tool, but I couldn't find anything like that.
Thanks!
Mulone
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
任意嵌套的标签不起作用,因为这使得语法非-常规。您需要能够处理上下文无关语法的东西。 ANTLR 是一个不错的选择。
Arbitrarily nested tags won't work since that's makes the grammar non-regular. You need something capable of dealing with a context-free grammar. ANTLR is a fine option.
使用
Pattern.DOTALL
选项创建正则表达式模式,如下所示:示例代码:
输出
更新
假设结束
}}
出现在{{ValueDescription
的单独行上> 以下模式将用于捕获多个ValueDescription
:Create your regex pattern using
Pattern.DOTALL
option like this:Sample Code:
OUTPUT
Update
Assuming closing
}}
appears on a separate line for{{ValueDescription
following pattern will work to capture multipleValueDescription
: