基本的正则表达式练习

时间:2013-12-10 05:58:14

标签: java regex

一个简单的问题我无法找到任何不推荐使用外部库的类似示例,我有一个练习,其中我们有类似于HTML / XML的模拟数据,我们仅限于使用Java正则表达式库来解析和操纵它。 我们希望将数据转换为地图。格式为:

<key> data words here </key>... 

...其中每个数据字将分别添加到地图中,因此生成的地图应如下所示:

{key, data
key, words
key, here}

我提出了一些解决方案,首先使用正则表达式找到并存储密钥,然后匹配密钥标记的内部,将该数据存储在字符串中,使用空格和括号分隔符对其进行标记,然后循环遍历结果列表写入地图。有没有更直接或更优雅的方法来实现这一点,我可以使用正则表达式捕获密钥和数据字的数组/列表,并消除使用标记化器?

下面的一些示例数据(请注意,没有嵌套标签使得这比解析HTML简单得多):

<author> A. Cau, R. Kuiper, and W.-P. de Roever. </author>
<title> Formalising Dijkstra's development strategy within Stark's formalism. </title>
<editor> In C. B. Jones, R. C. Shaw, and T. Denvir, editors, </editor>
<booktitle> Proc. 5th. BCS-FACS Refinement Workshop, </booktitle>
<date> 1992. </date>

(所有在一行 - 添加了换行符以便于阅读)

1 个答案:

答案 0 :(得分:1)

如果我理解正确,以下正则表达式会在组\1\2中捕获标记名称及其值:

<([^>/]+)>(.*?)</\1>

<强> EXPLAINED

< - 字面匹配<

([^>/]+) - 匹配并捕获非>/的所有内容,以避免关闭代码

> - 字面匹配>

(.*?) - 匹配并捕捉任何非贪婪的内容

</\1> - 匹配结束标记