Поиск строки в php-файле с началом и концом - PullRequest
2 голосов
/ 18 мая 2011

У меня проблемы с написанием php-функции для поиска определенного текста в php-файле.Я не очень хорошо разбираюсь в регулярных выражениях, поэтому я думаю, что это проблема.

Мне нужно, чтобы регулярное выражение имело начальное и конечное слова и должно возвращать текст, найденный между ними.Вот что я попробовал:

$handle1 = fopen($file, "r");
$fileContents = fread($handle1,filesize($file));
if (preg_match('/'.$start. '((.|\n)*)'. $end.'/', $fileContents, $match)) {
$text=preg_split('/'.$start.'((.|\n)*)'. $end.'/', $match[0]);
echo $text. " found in $file<br/>";
}

Может кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

8 голосов
/ 18 мая 2011
<?php
$str = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. ...';

$start = 'sadipscing';
$end = 'dolore';

$pattern = sprintf(
    '/%s(.+?)%s/ims',
    preg_quote($start, '/'), preg_quote($end, '/')
);

if (preg_match($pattern, $str, $matches)) {
    list(, $match) = $matches;
    echo $match;
}

Где $str должно быть содержимым вашего файла.

Посмотрите: http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php для модификаторов i, m и s.

6 голосов
/ 18 мая 2011

Для этого вам не нужно регулярное выражение.

function getText($string, $start, $end)
{
   $text = "";
   $posStart = strrpos($string, $start);
   $posEnd = strrpos($string, $end, $posStart);
   if($posStart > 0 && $posEnd > 0)
   {
       $text = substr($string, $posStart, strlen($string) - $posEnd));
   }
   return $text;
}

Надеюсь, это поможет.

2 голосов
/ 16 февраля 2014

Я люблю эти два решения

function GetBetween($content,$start,$end)
{
    $r = explode($start, $content);
    if (isset($r[1])){
        $r = explode($end, $r[1]);
        return $r[0];
    }
    return '';
}


function get_string_between($string, $start, $end){
    $string = " ".$string;
    $ini = strpos($string,$start);
    if ($ini == 0) return "";
    $ini += strlen($start);   
    $len = strpos($string,$end,$ini) - $ini;
    return substr($string,$ini,$len);
}

Я также сделал несколько тестов с обоими решениями выше, и оба дают почти одинаковое время. Вы также можете проверить это. Я дал обеим функциям файл для чтения, который содержал около 60000 символов (пересмотрено с помощью счетчика слов г-жи Ворд), и обе функции дали около 0,000999 секунд на поиск.

$startTime = microtime(true);
GetBetween($str, '<start>', '<end>');
echo "Explodin Function took: ".(microtime(true) - $startTime) . " to finish<br />";

$startTime = microtime(true);
get_string_between($str, '<start>', '<end>');
echo "Subsring Function took: ".(microtime(true) - $startTime) . " to finish<br />";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...