Php preg_match_all找不到出现的regexp

Php preg_match_all找不到出现的regexp,php,regex,preg-match,preg-match-all,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.

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

10022389_0.141
15-羟基前列腺素脱氢酶:灰姑娘遇见塞伦迪普王子约翰·W·芬德
10022389_144.85
澳大利亚维多利亚州墨尔本贝克医学研究所8008
10022389_232.223
地址:澳大利亚维多利亚州墨尔本市圣基尔达路中6492号邮政信箱,莫纳什大学贝克医学研究所约翰·W·芬德,邮编8008。
10022391_0.162
甲状腺激素抵抗的治疗&151;Primum Non Nocere Roy E.Weiss和Samuel Refetoff
10022391_250.510
地址对应和重印请求:Roy E. Weiss,M.D.,博士,甲状腺研究单位MC 3090,芝加哥大学医学系,5841马里兰大道,芝加哥,IL 60637。电子邮件:rweiss{at}medicine.bsd.uchicago。edurweiss@medicine.bsd.uchicago.edu.'//-->
我使用以下php代码查找上述数据集中的所有标记

$data = file_get_contents($dataset);
preg_match_all("|<TEXT>(.*)</TEXT>|s",$data,$out);
$data=file\u get\u contents($dataset);
preg_match_all(“|(.*)s”,$data,$out);
上面的代码取第一次出现的代码,与最后一次出现的代码相匹配,并显示中间的所有内容(这是整个文档,不包括前两行和最后两行,原因很明显)

我如何确保
preg\u match\u all
找到介于两者之间的事件


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

Regex不适合解析,从长远来看,您最好使用
DOMDocument
,如下所示


但是现在:
*
是贪婪的,会尽可能多地匹配。因此,匹配第一个
和最后一个
之间的所有内容是有意义的。如果您不希望出现这种行为,请使用
*?

无论如何,您应该使用DOMDocument,但是
$out[1]应该包含每一个匹配。@ PHPglue谢谢你的提示,我会考虑它,但让我们坚持上面的代码,因为这不是第一次发生在我身上,所以我想知道为什么未来。reference@kingkero+1谢谢你做了这个把戏,请留下它作为答案,我会选择它。另一个与此相关的问题问题,当我尝试DOMDocument解析数据集时,它返回一个错误,因为数据集的xml格式无效。是否有办法绕过此检查或在不修改数据集的情况下修复此错误?@AhouraGhotbi,我真的不知道。但是,如果没有,则可能存在错误(同样,我不能保证,将代码修改为有效的XML可能比寻找其他方法更容易)