簡體   English   中英

PHP preg_replace所有實例匹配

[英]PHP preg_replace all instance matches

我需要從一些xml日志中清除一些數據,並且我需要知道如何使preg_replace替換所有正則表達式匹配項。

xml看起來像這樣。

<contactData>                 
<id>29194</id>                 
<firstName>Michael</firstName>                 
<lastName>Smith</lastName>                 
<address1>1600 Pennsylvania Ave</address1>                 
<address2></address2>                 
<city>Washington</city>                 
<state>DC</state>                 
<postalCode>20500</postalCode>                 
<country>US</country>                 
<phone>3012013021</phone>                 
<email>michael@potus.gov</email>                 
</contactData>             
<contactData>                 
<id>29195</id>                 
<firstName>Shelly</firstName>                 
<lastName>McPherson</lastName>                 
<address1>2411 Georgia Ave</address1>                 
<address2></address2>                 
<city>Silver Spring</city>                 
<state>MD</state>                 
<postalCode>20902-5412</postalCode>                 
<country>US</country>                 
<phone>3012031302</phone>                 
<email>shelly@example.com</email>
</contactData>

當我在這個xml上運行它時。

$regex = $replace = array();
$regex[] = '/(<contactData>)(.*)(<email>)(.*)(<\/email>)/is';
$regex[] = '/(<contactData>)(.*)(<phone>)(.*)(<\/phone>)/is';
$replace[] = '$1$2$3xxxxxxxxxxxxxxxx$5';
$replace[] = '$1$2$3xxxxxxxxxxxxxxxx$5';
$text = preg_replace($regex, $replace, $text);

我明白了

<contactData>                 
<id>29194</id>                 
<firstName>Michael</firstName>                 
<lastName>Smith</lastName>                 
<address1>1600 Pennsylvania Ave</address1>                 
<address2></address2>                 
<city>Washington</city>                 
<state>DC</state>                 
<postalCode>20500</postalCode>                 
<country>US</country>                 
<phone>3012013021</phone>                 
<email>michael@potus.gov</email>                 
</contactData>             
<contactData>                 
<id>29195</id>                 
<firstName>Shelly</firstName>                 
<lastName>McPherson</lastName>                 
<address1>2411 Georgia Ave</address1>                 
<address2></address2>                 
<city>Silver Spring</city>                 
<state>MD</state>                 
<postalCode>20902-5412</postalCode>                 
<country>US</country>                 
<phone>xxxxxxxxxxxxxxxx</phone>                 
<email>xxxxxxxxxxxxxxxx</email>
</contactData>

如何獲得它來代替其他“ contactData”電子郵件和電話?

使用任何XML解析器執行此操作更為正確。 例如,simpleXML

// Your XML does not inlude root element. 
// If real does, remove `root`from the next line
$xml = simplexml_load_string('<root>' . $text . '</root>'); 
for($i = 0; $i < count($xml->contactData); $i++) {
    unset($xml->contactData[$i]->email);
    unset($xml->contactData[$i]->phone);
}

echo $xml->saveXML();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM