我需要帮助编写一个正则表达式,将标题标记中的内容移动到内容标记中。
此:
<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>
编辑:我提出了一个新主题,更好地解释了我的问题:Regular expression - moving content between XML tags
SORRY!
答案 0 :(得分:0)
(<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);
答案 1 :(得分:0)
首先,使用正则表达式来解析domnode很糟糕,有些dom-parsers可以提供更好的帮助。 匹配标题标记内容的表达式:
带有最小标志的RegEx(非贪婪,非匹配的换行符):
\<title\>(.*)\</title\>
RegEx否则:
\<title\>([^\</title\>]*)\</title\>
答案 2 :(得分:0)
使用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);