PHP разделить строку с начальным и конечным значением - PullRequest
0 голосов
/ 29 октября 2009

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

$ str = file_get_contents ('includes / header.php');

Отсюда я пытаюсь вернуть только строку, которая начинается с <ul class="home"> и заканчивается </ul>

постарайся выяснить выражение, которое я все еще в замешательстве.

Как только я обрежу строку, я могу просто напечатать это на своей странице, но не могу понять часть обрезки

Ответы [ 5 ]

1 голос
/ 29 октября 2009

Если вам нужно что-то действительно хардкорное, http://www.php.net/manual/en/book.xmlreader.php.

Если вы просто хотите извлечь текст, который соответствует этому шаблону, попробуйте что-то вроде этого.

$string = "stuff<ul class=\"home\">alsdkjflaskdvlsakmdf<another></another></ul>stuff";

if( preg_match( '/<ul class="home">(.*)<\/ul>/', $string, $match ) ) { //do stuff with $match[0] }

1 голос
/ 29 октября 2009

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

$start = preg_quote('<ul class="home">');

$end = preg_quote('</ul>', '/');

preg_match("/" . $start. '.*' . $end . "/", $str, $matching_html_snippets);

HTML-код, который вы хотите, должен быть в $matching_html_snippets[0]

1 голос
/ 29 октября 2009

Возможно, вам нужен синтаксический анализатор XML, например встроенный. Вот пример, на который вы можете взглянуть. http://www.php.net/manual/en/function.xml-parse.php#90733

Если вы хотите использовать регулярные выражения, тогда что-то вроде

$str = file_get_contents('includes/header.php');
$matchedstr = preg_match("<place your pattern here>", $str, $matches);

Возможно, вам нужен шаблон

'/<ul class="home">.*?<\/ul>/s'

Где $ match будет содержать массив найденных совпадений, так что вы можете получить любой элемент из массива с помощью

$matchedstr[0];

, который вернет первый элемент. А затем выведите это.

Но я бы немного насторожился, регулярные выражения имеют тенденцию совпадать с неожиданными крайними случаями, и вам нужно предоставить им фактические данные, чтобы получить надежные результаты, когда они терпят неудачу. Однако, если вы просто передаете шаблоны, все должно быть в порядке, просто проведите несколько тестов и посмотрите, все ли работает. Если нет, то я бы по-прежнему рекомендовал использовать PHP XML Parser.

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

0 голосов
/ 29 октября 2009

Вот новый способ сделать это; Я не даю никаких гарантий относительно надежности или производительности этого метода, за исключением того, что он работает для приведенного примера:

$prefix = '<ul class="home">';
$suffix = '</ul>';
$result = $prefix . array_shift(explode($suffix, array_pop(explode($prefix, $str)))) . $suffix;
0 голосов
/ 29 октября 2009

Если вы чувствуете, что не используете регулярные выражения, вы можете использовать поиск строк, что, как я думаю, подразумевается в руководстве по PHP, быстрее:

function substrstr($orig, $startText, $endText) {
    //get first occurrence of the start string
    $start = strpos($orig, $startText);
    //get last occurrence of the end string
    $end = strrpos($orig, $endText);
    if($start === FALSE || $end === FALSE)
        return $orig;
    $start++;
    $length = $end - $start;
    return substr($orig, $start, $length);
}

$substr = substrstr($string, '<ul class="home">', '</ul>');

Вам нужно будет внести некоторые коррективы, если вы хотите включить завершающие строки в вывод, но это должно помочь вам начать!

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