【问题标题】:Regular expression - move content from tag A to tag B [duplicate]正则表达式 - 将内容从标签 A 移动到标签 B [重复]
【发布时间】:2014-12-19 10:14:53
【问题描述】:

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

这个:

<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

对不起!

【问题讨论】:

  • 是否需要基于正则表达式的解决方案?
  • 不要重复自己的问题。而是编辑原始文件。 - 我现在关闭了原来的问题,因为我已经关闭了重复的问题。您应该在问题中更清楚地说明您已经尝试过什么,以便更具体地说明您实际有问题的部分。显示您自己的代码确实有助于在您的问题中更清楚地说明这一点。

标签: php regex xml


【解决方案1】:
(<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);

【讨论】:

  • 我不知道如何在 preg_replace() 中使用你的正则表达式,你能帮我吗?
  • @Dylan 我已经给出了完整的代码
  • 它不适合我。这是 XML 文件:bit.ly/1C7NZNv
  • @Dylan 你必须将你的xml 存储在一个变量中,然后应用代码
  • 我已经做到了,但它不起作用。
【解决方案2】:

使用 DOTALL 修饰符 s 在正则表达式中添加点以匹配换行符。

正则表达式:

~(<title>([^<>]*)<\/title>.*?<content>)~s

替换字符串:

\1\2 

DEMO

$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);

【讨论】:

    【解决方案3】:

    首先,使用正则表达式来解析 domnodes 是不好的,有 dom-parsers 可以提供更好的帮助。 匹配标题标签内容的表达式:

    带有最小标志的正则表达式(非贪婪,不匹配换行符):

    \<title\>(.*)\</title\>
    

    正则表达式:

    \<title\>([^\</title\>]*)\</title\> 
    

    【讨论】:

      猜你喜欢
      • 2015-10-05
      • 2012-12-16
      • 2018-05-14
      • 1970-01-01
      • 2014-01-17
      • 2014-04-11
      • 2013-05-28
      • 1970-01-01
      • 2013-01-07
      相关资源
      最近更新 更多