我们有时候会用到点号(.)来匹配除换行符 \n 之外的任何单字符。此时如果字符串中有换行符自然就匹配不到,其实也没必要在表达式中加换行,只需要在最后面加s就行了,此时点号(.)的匹配就包括换行符了。
$str = "<records>
<record>
<bookrecno>27249</bookrecno>
<callno><![CDATA[I313.45/102]]></callno>
</record>
<record>
<bookrecno>275276</bookrecno>
<callno><![CDATA[I313.45/843]]></callno>
</record>
<record>
<bookrecno>18231</bookrecno>
<callno><![CDATA[I313.45/3]]></callno>
</record>
</records>";
preg_match_all("/\<record\>(.*?)<\/record>/s", $str, $arr);
print_r($arr);
输出
Array
(
[0] => Array
(
[0] => <record>
<bookrecno>27249</bookrecno>
<callno><![CDATA[I313.45/102]]></callno>
</record>
[1] => <record>
<bookrecno>275276</bookrecno>
<callno><![CDATA[I313.45/843]]></callno>
</record>
[2] => <record>
<bookrecno>18231</bookrecno>
<callno><![CDATA[I313.45/3]]></callno>
</record>
)
[1] => Array
(
[0] =>
<bookrecno>27249</bookrecno>
<callno><![CDATA[I313.45/102]]></callno>
[1] =>
<bookrecno>275276</bookrecno>
<callno><![CDATA[I313.45/843]]></callno>
[2] =>
<bookrecno>18231</bookrecno>
<callno><![CDATA[I313.45/3]]></callno>
)
)
如果不带最后的s,就什么也匹配不到。
当然如果你的表达式中根本就没点号(.),那么加不加s都一样。