извлечь строку, соответствующую фразе - PullRequest
0 голосов
/ 20 сентября 2010

Я хочу сопоставить целую строку, соответствующую слову / фразе в этой строке!Я попробовал это:

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

Но я получаю только подходящее слово!но мне нужна вся эта линия!И там более 15К строк!

Ответы [ 3 ]

4 голосов
/ 20 сентября 2010

Просто используйте

^.*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, позволяющий ^ и $ совпадать в начале и конце каждой строки (вместо простого начала / конца строки).

3 голосов
/ 20 сентября 2010

Используйте что-то вроде:

$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

1 голос
/ 20 сентября 2010

try

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

file - Считывает весь файл в массив

preg_grep - Возвращает записи массива, соответствующие шаблону

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...