php preg_split () для поиска текста между двумя словами - PullRequest
0 голосов
/ 14 февраля 2011

как мне использовать preg_split (), чтобы получить значение между [item: 1] и [/ item: 1]$query= [item:1] my content [/item:1];

Это не работает$match = preg_split('/[[item:1][\/item:1]]/', $query);echo $match[0];

вывод должен быть просто "моим контентом".

ОБНОВЛЕНИЕ:


$query = '
[page:1]you got page one content[/page:1]
[page:2]you got page two content[/page:2]
';

// parse function
function parse_page($page, $string) {

    // VERY IMPORTANT STRIP OUT ANYTHING THAT WOULD SCREW UP THE PARSE
    $string = str_replace(array("\r", "\n", "\t", "\f"), array('', ''), $string);

    // test the string with the page number
    preg_match('@\[page:'.$page.'\](.*?)\[/page:'.$page.'\]@', $string, $matches);

    // return the match if it succeeded
    if($matches) {
        return $matches;
    }else {
        return false;
    }
}

// if page is set then try and obtain it
if(isset($_GET['p'])) {

    // set the returned parse value to a variable
    $page_dump = parse_page(($_GET['p']), $query);

    // check to see if the match was successful
    if($page_dump[1]) {
        echo $page_dump[1];
    }else {
        echo '0';
    }
}else {

    // parse page 1, if no page specified.
    $page_dump = parse_page('1', $query);

    if($page_dump[1]) {
        echo $page_dump[1];
    }else {
        echo 'no page =(';
    }
}

1 Ответ

3 голосов
/ 14 февраля 2011

Вы не хотите разбивать строку, вы хотите захватить образец. Для этого используйте preg_match, например

if (preg_match('@\[item:1\](.*?)\[/item:1\]@s', $query, $matches)) {
    echo $matches[1];
}

Редактировать: Проверено и работает

Edit2: Добавлен модификатор "s" (PCRE_DOTALL) - http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php.

Вы действительно должны рассмотреть лучшее решение для разметки (см. XML)

...