Xml 如何在perl中拆分字符串,保留分隔符,并在分隔符之间进行拆分?
我的问题有点罗嗦,所以我会尝试用一个例子来解释 我有一个文件,它有点类似于我需要解析的XML,尽管不完全是这样。文件中的元素通常类似于XML格式,如Xml 如何在perl中拆分字符串,保留分隔符,并在分隔符之间进行拆分?,xml,regex,perl,split,Xml,Regex,Perl,Split,我的问题有点罗嗦,所以我会尝试用一个例子来解释 我有一个文件,它有点类似于我需要解析的XML,尽管不完全是这样。文件中的元素通常类似于XML格式,如 <person><greeting>hello</greeting><goodbye>bye</goodbye></person> hellobye 我想把文件分割成单独的标记集,这样一个元素就可以 <greeting>hello</greeting>
<person><greeting>hello</greeting><goodbye>bye</goodbye></person>
hellobye
我想把文件分割成单独的标记集,这样一个元素就可以
<greeting>hello</greeting>
你好
另一个是
<goodbye>bye</goodbye>
再见
当然,对于一个空元素,
和
将成为它们自己的元素,我完全同意这一点,因为我希望将文件作为一个整体进行解析
我遇到的问题是如何最好地将整个文件分割成一个数组,因为文件中根本没有换行符,而是按照您看到的方式写出来的。我试过这样做
my @array = split(/(><)/, $file)
<([^>]*)>(.*?)</\1>
my@array=split(/(>我不确定这是否是最好的解决方案,但要直接回答您的问题,您可以使用在角度之间分割
my@array=split(/(?)(?=
(.*)
看到了吗
此正则表达式中有两个引用。第一个用于匹配结束标记,第二个用于查找标记的内容
当然,它首先会匹配“person”标记,但您会在
$2
中找到其他标记。您必须在$2上递归使用正则表达式,直到结果为空数组。我不确定这是否是最佳解决方案,但要直接回答您的问题,您可以使用
my@array=split(/(?)(?=
(.*)
看到了吗
此正则表达式中有两个引用。第一个用于匹配结束标记,第二个用于查找标记的内容
当然,它首先会匹配“人”标记,但您将在
$2
中找到其他标记。您必须在$2上递归使用正则表达式,直到结果为空数组。如果您的文件与XML足够接近,为什么不使用XML解析器呢?基本上,这是一个家庭作业,或者说离它足够近。这是正则表达式的练习,而不是XML解析,我们受到鼓励不要使用XML库。如果您的文件与XML足够接近,为什么不使用XML解析器呢?基本上,这是一个家庭作业,或者说离它足够近。这是一个正则表达式练习,而不是XML解析练习,我们被鼓励不要使用XML库。这似乎工作得很好,但似乎在甚至是每个完整元素。@DanielSarder围绕正则表达式的捕获组(不需要)导致了数组中的空元素。更正了我的答案。这似乎工作得很好,但似乎在每个完整元素之间插入了空元素。@DanielSarder(不需要)捕获正则表达式周围的组导致数组中的空元素。更正了我的答案。
<([^>]*)>(.*?)</\1>