Preg匹配找不到正确的字符串

时间:2013-03-21 08:05:27

标签: php xml regex

我有一个问题,我有一个脚本应该搜索XML文件以匹配字符串。 这是我的剧本:

   <?php
$file = "klein.xml";
$lines = file($file);
foreach ($lines as $line_num => $line)
{
    echo htmlentities($line);
    echo "<br>";

}

   if (preg_match("/message/", htmlentities($line), $found))
   {
     echo "Found!";
     echo $found[0]; 
     echo "test";
   }
   else
   {
       echo "Not Found!";
   }
?>

这是我正在使用的xml文件:

    <?xml version="1.0" encoding="ISO-8859-1"?>
<product-data>
<message-header>
<message-id>OR-1361163557-gr</message-id>
<message-timestamp>1361163557</message-timestamp>
<export-version current_version="1">OGPDX-2.01.01</export-version>
</message-header>
</product-data>

问题是当我preg匹配'product'时它正常工作但是当我尝试preg匹配另一个字符串,即'message'时它不起作用?

我很好奇这个解决方案,提前谢谢!

3 个答案:

答案 0 :(得分:0)

您能否查看此代码,我注意到您将if循环放在foreach之外;因此只执行最后一行。

<?php
$file = "klein.xml";
$lines = file($file);
foreach ($lines as $line_num => $line)
{
   if (preg_match("/message/", htmlentities($line), $found))
   {
     echo "Found ".$found[0]."<br />";
   }
}
?>

答案 1 :(得分:0)

问题在于您的逻辑:您只检查包含$line

</product-data>的最后一个值

答案 2 :(得分:0)

所以你在搜索什么? xml的一行...
当你搜索“产品”(在最后一行)时,$ line在最后一行。

foreach ($lines as $line_num => $line)
{
   if (preg_match("/message/", $line , $found))
   {
     echo "Line: $line_num - ".$found[0]." <br>";
   }
}