preg_match_all 没有找到正则表达式

preg_match_all does not find occurrences of regexp

我有以下 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);

上面的代码取第一次出现并匹配最后一次出现并显示两者之间的所有内容(这是整个文档,不包括前两行和最后两行,原因很明显。

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

我完全知道数据集不是有效的 XML 文件,但我无法重新格式化它,因此请避免留下与 XML.

相关的评论

正则表达式不太适合解析,在较长的 运行 中你最好使用 DOMDocument,因为 .

但现在:.* 是贪心的,会尽可能匹配。因此匹配第一个 <TEXT> 和最后一个 </TEXT> 之间的所有内容是有意义的。如果您不希望出现这种情况,请改用 .*?