我有以下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—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相关的注释。
答案 0 :(得分:2)
正则表达式并不适合解析,从长远来看,使用DOMDocument
作为PHPglue suggested会更好。
但是现在:.*
是贪婪的,并会尽可能地匹配。因此,匹配第一个<TEXT>
和最后一个</TEXT>
之间的所有内容是有意义的。如果您不想要此行为,请改用.*?
。