preg_match_all不返回期望值

Zedling

我编写了一个相对简单的代码,根据特定的模式从日志文件中提取电子邮件地址;我只对人们向自己发送电子邮件的情况感兴趣。

这在日志中显示如下: <%EMAIL%> -> <%SAME-EMAIL%>

澄清:

<%EMAIL%>表示电子邮件地址,其中用“ <>”字符表示,后跟“->”,然后是相同的电子邮件地址。该模式可能(也可能不会)在一行中多次出现。

for example:

<[email protected]> -> <[email protected]> should match
<[email protected]> -> <[email protected]> should NOT match

我当前使用的代码:

$regx = '/(<[\S]+>)\s->\s\1/';
while ( !feof($myfile) )
{
    $line = fgets($myfile);
    $tmpline = $line;
    if ( preg_match_all($regx, $tmpline, $tmp) )
    {
        $data[$caught++] = $tmp;
    }
}
fclose($myfile);

我的问题是,$tmp数组不只将实际地址存储在“->”子字符串中。我的输出(print_r($data))如下所示:

Array
(
    [0] => Array
    (
        [0] =>  -> 
    )

    [1] => Array
    (
        [0] => 
    )

)
...

我怀疑,问题出在我的正则表达式模式上,但是不幸的是我还无法识别它。

请帮忙。

结束语:

输出始终正确,但是电子邮件在<>字符内,并且我的浏览器尝试将它们解析为HTML或XML,因此在将它们回显时它们不会出现:@

解决方案隐藏在视图源中。

py

这个怎么样?

$data = 
    preg_match_all('/<(\S+)>\s->\s<\1>/', file_get_contents($filename), $m)
    ? $m[1]
    : array()
;
print_r($data);

ideone.com上的演示


使用的另一个版本fgets()

$data = array();
$fp = fopen($filename, 'r');
while (false !== $row = fgets($fp)) {
    if (preg_match_all('/<(\S+)>\s->\s<\1>/', $row, $m)) {
        foreach ($m[1] as $email) {
            $data[] = $email;
        }
    }
}
if (!feof($fp)) {
    exit('Error');
}
print_r($data);

ideone.com上的演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

preg_match_all不返回期望值

来自分类Dev

PHP preg_match_all不返回值

来自分类Dev

PHP preg_match_all不返回值

来自分类Dev

任务ContinueWith不返回期望值

来自分类Dev

标量UDF不返回期望值

来自分类Dev

preg_match_all在输出数组中不返回任何值

来自分类Dev

PHP preg_match_all返回空

来自分类Dev

php从preg_match_all返回数组

来自分类Dev

PHP preg_match_all返回空

来自分类Dev

Mockito什么时候/然后不返回期望值

来自分类Dev

嵌套匹配的索引不返回期望值

来自分类Dev

XNA Rectangle.Center不返回期望值

来自分类Dev

PHP的preg_match_all简单的正则表达式返回空值

来自分类Dev

preg_match_all()不匹配所有可能的出现

来自分类Dev

PHP preg_match_all与转义引号不匹配

来自分类Dev

为什么映射可枚举的返回值不返回期望值

来自分类Dev

当最大值返回NULL时,函数不返回期望值

来自分类Dev

PHP preg_match_all未返回所需的输出

来自分类Dev

preg_match_all返回模式匹配而不是主题匹配

来自分类Dev

PHP的preg_match_all返回数组数组

来自分类Dev

Spock存根未返回期望值

来自分类Dev

COUNTIF公式未返回期望值

来自分类Dev

Ruby命令未返回期望值

来自分类Dev

使用从createFromFormat创建的值添加到DateTime时不返回期望值

来自分类Dev

List.contains为长值不返回期望值(常规)

来自分类Dev

preg_match_all说明

来自分类Dev

如何使用 preg_match_all 提取 3 个值

来自分类Dev

正则表达式组不返回期望值

来自分类Dev

java.awt.image.BufferedImage.getRBG不返回期望值