0

当我尝试

$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>
4

1 回答 1

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));;
于 2013-04-26T04:01:07.380 回答