最重要的是:我的英语不是那么好,所以...如果你们不能理解我,我想请求道歉:)
所以,这就是我正在寻找的: 我正在使用Wordpress插件生成XML(WP ALL EXPORT)。好。
现在,我需要打开一个文件并编辑一些东西。我开始时:
$data = file_get_contents("1439828483.xml");
现在我正在使用str_replace和preg_replace来更新我需要的行。
我有两个这样的XML标记:
<cidade><![CDATA[sao-paulo>santo-andre]]></cidade>
<bairro><![CDATA[sao-paulo>santo-andre]]></bairro>
你看到内容是一样的......但是因为我有一个&#34;&gt;&#34;字符拆分2件事。
在<cidade></cidade>
标记中,我只需保留之前的内容&#34;&gt;&#34;。
在<bairro></bairro>
标记中,我只需要保留&#34;&gt;&#34;之后的内容。
对于第二个问题,我修复了这个问题:
$data = preg_replace('#(<bairro>).*?(>)#', '$1$2', $data);
$data = str_replace('<bairro>>', "<bairro><![CDATA[",$data);
结果是:
<bairro><![CDATA[santo-andre]]></bairro>
好的,我有内容,但它仍然有连字符(短划线),现在我无法修复它(不知道如何)。我真正需要的是:
<bairro><![CDATA[santo andre]]></bairro>
当然,对于标签<cidade></cidade>
,我需要:
<cidade><![CDATA[sao paulo]]></cidade>
在发布之前,我发现了这个主题: Regex between, from the last to specific end
但我试图编辑anubhava和Jack Maney答案的某些部分,但我失败了:(
当我使用preg_replace和str_replace时,我不知道正则表达式字符串是否有一些限制。
谢谢,我希望你们能理解我:D
答案 0 :(得分:1)
这样做(并替换你自己的修复):
$data = preg_replace('#(<bairro><!\[CDATA\[)[^>]*?>([^>]*?><)#', '$1$2', $data);
while(preg_match('#(<bairro>[^->]*?)-([^->]*?-)*([^->]*?'.'>)#', $data)) {
$data = preg_replace('#(<bairro>[^->]*?)-(([^->]*?-)*)([^->]*?'.'>)#', '$1 $2$4', $data);
}
$data = preg_replace('#(<cidade><!\[CDATA\[[^>]*?)>[^>]*?(\]\]><)#', '$1$2', $data);
while(preg_match('#(<cidade>[^->]*?)-([^->]*?-)*([^->]*?'.'>)#', $data)) {
$data = preg_replace('#(<cidade>[^->]*?)-(([^->]*?-)*)([^->]*?'.'>)#', '$1 $2$4', $data);
}
答案 1 :(得分:0)
我要指出parsing XML with regex is often a bad idea,部分是因为你发现的原因。但是,如果您只想用空格替换连字符,只需执行以下操作:
$data = str_replace_all('-', " ", $data);
这将替换输入中的所有连字符,当然,请确保您知道其中的内容。