正则表达式删除标记中的行,同时保留其他标记

时间:2016-04-18 10:47:22

标签: php regex xml newline

我有一个巨大的XML文档,我想要清理它,因为文本编辑器已经添加了wordwrap,无缘无故。

所以部分XML代码如下所示:

<ProfileFolder name="I/O">
<Allowed display="I/O" value="I/O"/>
<Allowed display="I/O, I/O connector"
value="4pin I/O connector"/>
<Allowed display="I/O, I/O connector"
value="6pin I/O connector"/>
<Allowed display="I/O, I/O connector"
value="configurable I/O connectors"/>
<Allowed display="I/O, I/O connector"
value="fixed I/O connectors"/>
<Allowed value="pin numbers above"/>
<Allowed value="pin numbers below"/>
<Allowed display="I/O, I/O connector" value="relay ports"/>
<Allowed display="VoIP" value="call button"/>
</ProfileFolder>

我想删除标签内的换行符,而不是:

<Allowed display="I/O, I/O connector"
value="fixed I/O connectors"/>

我想:

<Allowed display="I/O, I/O connector" value="fixed I/O connectors"/>

我真的很讨厌RegEx,尽管它非常强大,但我无法弄清楚RegEx代码的正确格式。

我试过了:

<(.*)\n(.*)?\/>

(?<=>)(.*)\n(.*)\/>

(哪个最接近,但与我想要的相反):)

目前正在使用Sublime。

3 个答案:

答案 0 :(得分:0)

这么简单:

\n(?!<)

应该适用于您的情况。此正则表达式表示未跟随<字符的换行符。

你可以找到这个并用一个空格替换。

答案 1 :(得分:0)

使用XML Parser:

$xml = simplexml_load_string( $xml );
echo $xml->asXML();

将输出:

(...)
<Allowed display="I/O, I/O connector" value="4pin I/O connector"/>
<Allowed display="I/O, I/O connector" value="6pin I/O connector"/>
(...)

SimpleXML默认删除标记声明中的所有换行符。

答案 2 :(得分:0)

这也可行

(?<!>)\n

正则表达式解释

(?<!>)\n #Assure that the line does not end with > followed by a \n.

因此,如果该行满足上述条件,则合并行