首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用正则表达式解析wikiText

用正则表达式解析wikiText
EN

Stack Overflow用户
提问于 2011-06-03 13:27:40
回答 2查看 864关注 0票数 3

给定一个wikiText字符串,如:

代码语言:javascript
复制
{{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中的模板ValueDescriptionTag。我尝试使用regex /\{\{\s*Tag(.+)\}\}/,它很好(它返回|name|ref|motorcar||yes),但是/\{\{\s*ValueDescription(.+)\}\}/不能工作(它应该返回上面所有的文本)。

预期产出

有没有一种方法可以跳过regex中的嵌套模板?

理想情况下,我宁愿使用一个简单的wikiText 2 xml工具,但是我找不到类似的东西。

谢谢!木兰

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-03 14:29:44

使用Pattern.DOTALL选项创建正则表达式模式,如下所示:

代码语言:javascript
复制
Pattern p = Pattern.compile("\\{\\{\\s*ValueDescription(.+)\\}\\}", Pattern.DOTALL);

样本代码:

代码语言:javascript
复制
Pattern p=Pattern.compile("\\{\\{\\s*ValueDescription(.+)\\}\\}",Pattern.DOTALL);
Matcher m=p.matcher(str);
while (m.find())
   System.out.println("Matched: [" + m.group(1) + ']');

输出

代码语言:javascript
复制
Matched: [
|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}}
]

更新

假设关闭}}出现在单独的{{ValueDescription行上,下面的模式将用于捕获多个ValueDescription

代码语言:javascript
复制
Pattern p = Pattern.compile("\\{\\{\\s*ValueDescription(.+?)\n\\}\\}", Pattern.DOTALL);
票数 2
EN

Stack Overflow用户

发布于 2011-06-03 13:31:45

任意嵌套的标记不能工作,因为这使得语法非常规。你需要一些能够处理上下文无关语法的东西。是一个很好的选择。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6227706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档