PHP preg_match_all问题

时间:2018-09-29 12:12:13

标签: php regex preg-match-all

因此,我写了一个小脚本,它将登录到我的电子邮件中并在每条消息中搜索某些链接。当电子邮件为HTML正文时,一切正常,一切正常。但是,当电子邮件为TEXT时,存在某种差异,无法找到匹配项。

这是我转义链接模式以检查电子邮件的方法。我的可变占位符是*。

 $found = false;
 $escape = array('\\','/','(', ')', '?', '&');
 for ($i = 0; $i < $link_count; $i++) {
     foreach ($escape as $e){
        $links[$i] = str_replace($e, "\\$e", $links[$i]);
        $links[$i] = str_replace('*', '.*', $links[$i]);
      }
 }

 while (true) {
 $index = strpos($body, 'http://');

if ($index === false){
        break;
    }

$body = substr($body, $index);
$part = explode('"', $body, 2);
$part = explode(' ', $part[0], 2);
$part = explode("\n", $part[0], 2);
$part = explode("'", $part[0], 2);
$part = explode("<", $part[0], 2);
$tag = trim($part[0]);

foreach ($links as $link) {
    preg_match_all("/$link/", $tag, $matches, PREG_SET_ORDER);

    foreach ($matches as $match) {
        $found = true;
    }
}

来自HTML电子邮件这是一个匹配项: http://knowndomain.com/something.php \?id = ...... \&md = ...... \&mu = ...... *-> http://matchingdomain.com/couldbe.php?id=1&md=2&mu=tr

但是在文本电子邮件中,相同的检查失败

我的问题是我在这里到底想念什么。检查前的所有输出都相同!?

1 个答案:

答案 0 :(得分:0)

所以我发现问题可能没有。.正如我认为的那样,它实际上与HTML或文本电子邮件没有任何关系..实际上这是每个链接都有细微差别的事实。

因此我删除了$ links [$ i] = str_replace('','。',$ links [$ i]);从我的exape循环中放到preg_match之前。

经过测试可以正常工作,所以我暂时不会对此提出疑问。