提取与短语匹配的行

时间:2010-09-20 07:05:02

标签: php regex

我希望匹配该行上匹配单词/短语的整行! 我试过这个:

preg_match("/PHRASE/i", $dictionary,$matches);

但我只得到匹配的字!但我需要整条线!超过15K线!

3 个答案:

答案 0 :(得分:4)

只需使用

^.*PHRASE.*$

^以匹配行的开头

.*匹配除换行符之外的任意数量的字符

PHRASE以匹配您的关键字/词组

.*如上所述

$以匹配该行的结尾。

您可能还希望将PHRASE用词边界锚定(如果您的词组确实是单词或单词):^.*\bPHRASE\b.*$仅在PHRASE独立时才匹配(而不是像PHRASEBOOK)这样的另一个词的一部分。

因此,如果您将正则表达式分别应用于每一行,请使用

preg_match('/^.*PHRASE.*$/i', $dictionary, $matches)

如果您的所有行都在一个长多行字符串中,并且想要遍历包含您的短语的所有行,请使用:

preg_match_all('/^.*PHRASE.*$/im', $dictionary, $matches, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($matches[0]); $i++) {
    # Matched text = $matches[0][$i];
}

请注意/m修饰符,以允许^$在每行的开头和结尾匹配(而不仅仅是字符串的开头/结尾)。

答案 1 :(得分:3)

使用类似:

$handle = @fopen("file.txt", "r");
if ($handle)
{
    $matches = array();
    while (!feof($handle))
    {
        $buffer = fgets($handle);
        if(stripos($buffer,"mystring") !== false)
        {
            $matches[] = $buffer;
        }
    }
    fclose($handle);
}

然后您可以在$matches

中看到结果

答案 2 :(得分:1)

尝试

preg_grep('/whatever/', file('filename'));

file - 将整个文件读入数组

preg_grep - 返回与模式匹配的数组条目