\ n(新行)在我使用preg_replace函数时替换整个字符串

时间:2013-04-26 03:45:42

标签: php regex

当我尝试

$stg = preg_replace("/<PREPNAME>.*<\/PREP_ZIP>/s","",$stg);

它正常工作,它取代了该函数中写入的文本。我得到$stg被剥夺,我得到剩下的字符串。

但是当我尝试使用"\n"时,它会清空整个字符串。

$stg = preg_replace("/<PREPNAME>.*<\/PREP_ZIP>\n/s","",$stg);

我在第二种情况下让$stg为空。

请帮忙。我失踪的地方?

示例字符串: -

这不是XML字符串。这只是存储在数据库中的blob数据。虽然取这个只是一个字符串。

<T2_NASD_LAST_NAME1>ASDSADSA</T2_NASD_LAST_NAME1>\r\n    
<T2_NASD_FIRST_NAME1>SADASD</T2_NASD_FIRST_NAME1>\r\n    
<T2_SOC1>012345678</T2_SOC1>\r\n     
<T2_DOBM1>02</T2_DOBM1>\r\n  <T2_DOBD1>02</T2_DOBD1>\r\n     
<T2_DOBY1>1984</T2_DOBY1>\r\n    
<T2_NASD_LAST_NAME>ASDSADSA</T2_NASD_LAST_NAME>\r\n
<T2_NASD_FIRST_NAME>SADASD
</T2_NASD_FIRST_NAME>\r\n
<T2_NASD_MIDDLE_NAME>ASDA</T2_NASD_MIDDLE_NAME>\r\n
<T2_SOC>012345678</T2_SOC>\r\n<T2_ADR_ADRN>SADSADAS</T2_ADR_ADRN>\r\n
<T2_ADR_ADRA>DASD</T2_ADR_ADRA>\r\n<T2_ADR_ADRC>ASDSADSA</T2_ADR_ADRC>\r\n
<T2_ADR_ADRS>MI</T2_ADR_ADRS>\r\n<T2_ADR_ADRZ>11111</T2_ADR_ADRZ>\r\n
<T2_DOBM>02</T2_DOBM>\r\n<T2_DOBD>02</T2_DOBD>\r\n
<T2_DOBY>1984</T2_DOBY>\r\n\n\n\n\n\n\n\n<PREPFLAG>NONE</PREPFLAG>\n
<PREPNAME>AAAA</PREPNAME>\n
<PREPADDRESS>BBBB</PREPADDRESS>\n
<PREP_ZIP>1984</PREP_ZIP>

1 个答案:

答案 0 :(得分:0)

您必须在\ n之前添加两个\并使用简单的引号

<?php 
$subject = <<<'LOD'
<T2_DOBY1>1984</T2_DOBY1>\r\n    
<T2_NASD_LAST_NAME>ASDSADSA</T2_NASD_LAST_NAME>\r\n
<T2_NASD_FIRST_NAME>SADASD
<PREP_ZIP>NONE</PREP_ZIP>\n
</T2_NASD_FIRST_NAME>\r\n
<T2_DOBY1>1984</T2_DOBY1>\r\n    
<T2_NASD_LAST_NAME>ASDSADSA</T2_NASD_LAST_NAME>\r\n
<T2_NASD_FIRST_NAME>SADASD
</T2_NASD_FIRST_NAME>\r\n
LOD;
$pattern = '~<PREP_ZIP>.*?</PREP_ZIP>\\\n~s';
echo htmlspecialchars(preg_replace($pattern, "#!!!YOUHOU!!!#", $subject));;