Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何在perl中拆分字符串,保留分隔符,并在分隔符之间进行拆分?_Xml_Regex_Perl_Split - Fatal编程技术网

Xml 如何在perl中拆分字符串,保留分隔符,并在分隔符之间进行拆分?

Xml 如何在perl中拆分字符串,保留分隔符,并在分隔符之间进行拆分?,xml,regex,perl,split,Xml,Regex,Perl,Split,我的问题有点罗嗦,所以我会尝试用一个例子来解释 我有一个文件,它有点类似于我需要解析的XML,尽管不完全是这样。文件中的元素通常类似于XML格式,如 <person><greeting>hello</greeting><goodbye>bye</goodbye></person> hellobye 我想把文件分割成单独的标记集,这样一个元素就可以 <greeting>hello</greeting>

我的问题有点罗嗦,所以我会尝试用一个例子来解释

我有一个文件,它有点类似于我需要解析的XML,尽管不完全是这样。文件中的元素通常类似于XML格式,如

<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>