preg_match在'Hifi Reg Tester'中工作,但在代码中返回'false'

时间:2013-08-08 15:54:01

标签: php regex email preg-match

很抱歉问一个这么简单的问题,但这是我的问题。我实际上正在修改PlancakeEmailParser以满足我的需求。

我做了一个简单的正则表达式:

/([^:]+) (<+.*>)$/

应符合:

John DOE <johndoe@fakemail.com>

我在http://www.gethifi.com/tools/regex中测试了它完美无缺

但在我的代码中,它返回false!

以下是有问题的代码:

preg_match('/([^:]+): ?(.*)$/', $line, $matches);
$newHeader = strtolower($matches[1]);

$string = $matches[2];
$reg = "/([^:]+) (<+.*>)$/";

echo 'VALUE: '.$string."\n";
echo 'PREG_MATCH: '.preg_match($reg, $string)."\n\n";

if (preg_match('/([^:]+) (<+.*>)$/', $matches[2])) {
    echo('match'."\n\n\n\n");
} else {
    $value = $matches[2];
}

以下是回音反馈:

VALUE: John DOE <johndoe@fakemail.com>
PREG_MATCH: 0

你们中谁都明白这是什么问题?

非常感谢!

修改

问题是我对所有内容都做了很多,所以&lt;&gt;转换的地方。

解决方案是重写正则表达式:

/([^:]+) (<+.*>)$/

到这个

/([^:]+) (&lt;+.*&gt;)$/

非常感谢Peter Alfvin试图帮助:)。

也许有一天它可以帮助某人

1 个答案:

答案 0 :(得分:0)

已解决问题是我对所有内容进行了 htmlentities ,因此&lt;&gt;在哪里转换。解决方案是从这里重写正则表达式:

/([^:]+) (<+.*>)$/ to this /([^:]+) (&lt;+.*&gt;)$/

或从所有内容中移除htmlentities并仅在需要时使用它,我终于做到了!

也许有一天它会帮助某人......