正则表达式 - 将内容从标签 A 移动到标签 B


Regular expression - move content from tag A to tag B

我需要帮助编写一个正则表达式,将内容从标题标签移动到内容标签中。

这:

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