php preg_match不返回任何结果

时间:2011-04-14 08:34:42

标签: php regex

请在我的代码中更正我。我有一个txt文件,并包含关键字。

example
aaa
aac
aav
aax
asd
fdssa
fsdf

我创建了一个用于搜索的php文件。

<?php
$file = "myfile.txt";
if($file) {
    $read = fopen($file, 'r');
    $data = fread($read, filesize($file));
    fclose($read);

    $im = explode("\n", $data);
    $pattern = "/^aa+$/i";

    foreach($im as $val) {
        preg_match($pattern, $val, $matches);
    }
}
else {
    echo $file." is not found";
}
?>
<pre><?php print_r($matches); ?></pre>

这应该返回

aac
aav
aax

它应该返回一个匹配词。如果单词左边有“aa”,则所有左边有aa的单词都会返回。我希望结果在数组中。 怎么做?请帮忙

2 个答案:

答案 0 :(得分:2)

您的变量$matches只会保留最后匹配尝试的结果,因为它会被每次foreach次迭代覆盖。此外,^aa+$仅匹配包含两个或更多a s。

的字符串

要匹配仅以aa开头的字符串,请改用^aa。如果你想要所有匹配的行,你需要在另一个数组中收集它们:

foreach ($im as $val) {
    if (preg_match('/^aa/', $val, $match)) {
        $matches[] = $match;
    }
}

您还可以使用filepreg_grep

$matches = preg_grep('/^aa/', file($file));

答案 1 :(得分:1)

<强>代码:

<?php
$filePathName = '__regexTest.txt';

if (is_file($filePathName)) {

    $content = file_get_contents($filePathName);

    $re = '/
        \b          # begin of word
        aa          # begin from aa
        .*?         # text from aa to end of word
        \b          # end of word
        /xm';       //  m - multiline search & x - ignore spaces in regex 

    $nMatches = preg_match_all($re, $content, $aMatches);
}
else {
    echo $file." is not found";
}
?>
<pre><?php print_r($aMatches); ?></pre>

<强>结果:

Array
(
    [0] => Array
        (
            [0] => aaa
            [1] => aac
            [2] => aav
            [3] => aax
        )

)

它也适用于

aac  aabssc
aav