preg_match_all找不到regexp的出现

时间:2015-01-20 01:28:08

标签: php regex preg-match preg-match-all

我有以下XML数据集:

<DOC>
<DOCNO>10022389_0.141</DOCNO>
<TEXT>
      15-Hydroxyprostaglandin Dehydrogenase: Cinderella Meets Prince Serendip          John W. Funder  
</TEXT>
</DOC>


<DOC>
<DOCNO>10022389_144.85</DOCNO>
<TEXT>
    Baker Medical Research Institute  Melbourne, Victoria, Australia 8008   
</TEXT>
</DOC>


<DOC>
<DOCNO>10022389_232.223</DOCNO>
<TEXT>
     Address correspondence and requests for reprints to: John W. Funder, Baker Medical Research Institute, Monash University, P.O. Box 6492, St. Kilda Road Central, Melbourne, Victoria, Australia 8008.
</TEXT>
</DOC>

<DOC>
<DOCNO>10022391_0.162</DOCNO>
<TEXT>
      Treatment of Resistance to Thyroid Hormone&#151;Primum Non Nocere          Roy E. Weiss and   Samuel Refetoff  
</TEXT>
</DOC>



<DOC>
<DOCNO>10022391_250.510</DOCNO>
<TEXT>
     Address correspondence and requests for reprints to: Roy E. Weiss, M.D., PhD, Thyroid Study Unit MC 3090, Department of Medicine, University of Chicago, 5841 S. Maryland Ave, Chicago, IL 60637.  E-mail:  rweiss{at}medicine.bsd.uchicago.edurweiss@medicine.bsd.uchicago.edu.'//-->
</TEXT>
</DOC>

我使用以下php代码查找上述数据集中的所有标记

$data = file_get_contents($dataset);
preg_match_all("|<TEXT>(.*)</TEXT>|s",$data,$out);

上面的代码首次出现并匹配LAST事件并显示其间的所有内容(由于显而易见的原因,这是除前2行和后2行之外的整个文档。

如何确保preg_match_all找到介于两者之间的事件?

我完全了解数据集不是有效的XML文件,但我无法重新格式化,因此请避免留下与XML相关的注释。

1 个答案:

答案 0 :(得分:2)

正则表达式并不适合解析,从长远来看,使用DOMDocument作为PHPglue suggested会更好。

但是现在:.*是贪婪的,并会尽可能地匹配。因此,匹配第一个<TEXT>和最后一个</TEXT>之间的所有内容是有意义的。如果您不想要此行为,请改用.*?