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

regex remove line in tag while maintaining other tags

我有一个巨大的 XML 文档,我想清理它,因为文本编辑器无缘无故地向它添加了自动换行。

部分 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。

就这么简单:

\n(?!<)

应该适合你的情况。此正则表达式表示换行符后没有 < 字符。

您可以找到它并替换为单个 space。

使用 XML 解析器:

$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 默认删除标签声明中的所有换行符。

这也行

(?<!>)\n

正则表达式解释

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

所以如果该行满足上述条件,则合并这些行