我需要帮助编写一个正则表达式,将内容从标题标签移动到内容标签中。
这:
<xml>
<item>
<title>Title 1</title>
<content>Text 1</content>
</item>
<item>
<title>Title 2</title>
<content>Text 2</content>
</item>
</xml>
对此:
<xml>
<item>
<title>Title 1</title>
<content>Title 1 Text 1</content>
</item>
<item>
<title>Title 2</title>
<content>Title 2 Text 2</content>
</item>
</xml>
编辑:我做了一个新主题,更好地解释了我的问题:正则表达式 - 在XML标签之间移动内容
不好意思!
(<title>((?:(?!<'/title>).)*)<'/title>'s*<content>)((?:(?!<'/content>).)*)
试试这个。替换为
$1$2 $3
请参阅演示。
https://regex101.com/r/vN3sH3/22
$re = "/(<title>((?:(?!<''/title>).)*)<''/title>''s*<content>)((?:(?!<''/content>).)*)/";
$str = "<xml>'n <item>'n <title>Title 1</title>'n <content>Text 1</content>'n </item>'n <item>'n <title>Title 2</title>'n <content>Text 2</content>'n </item>'n</xml>";
$subst = "$1$2 $3";
$result = preg_replace($re, $subst, $str);
使用DOTALL
修饰符s
在正则表达式中制作点以匹配换行符。
正则表达式:
~(<title>([^<>]*)<'/title>.*?<content>)~s
替换字符串:
'1'2
演示
$re = "/(<title>([^<>]*)<''/title>.*?<content>)/s";
$str = "<xml>'n <item>'n <title>Title 1</title>'n <content>Text 1</content>'n </item>'n <item>'n <title>Title 2</title>'n <content>Text 2</content>'n </item>'n</xml>";
$subst = "'1'2 ";
$result = preg_replace($re, $subst, $str);
首先,使用正则表达式来解析 domnode 是不好的,有一些 dom-parser 可以更好地帮助。用于匹配标题标签内容的表达式:
带有最小标志的正则表达式(非贪婪,不匹配换行符(:
'<title'>(.*)'</title'>
否则正则表达式:
'<title'>([^'</title'>]*)'</title'>