0

如何使用 preg_split() 获取 [item:1] 和 [/item:1] 之间的值
$query= [item:1] my content [/item:1];

这不起作用
$match = preg_split('/[[item:1][\/item:1]]/', $query);
echo $match[0];

输出应该只是“我的内容”。

更新:

$查询 = '
[page:1]你有第一页的内容[/page:1]
[page:2]你有第二页的内容[/page:2]
';

// 解析函数
函数 parse_page($page, $string) {

    // 非常重要的删除任何会搞砸解析的东西
    $string = str_replace(array("\r", "\n", "\t", "\f"), array('', ''), $string);

    // 用页码测试字符串
    preg_match('@\[page:'.$page.'\](.*?)\[/page:'.$page.'\]@', $string, $matches);

    // 如果匹配成功则返回匹配
    如果($匹配){
        返回$匹配;
    }别的 {
        返回假;
    }
}

// 如果页面被设置然后尝试获取它
如果(isset($_GET['p'])){

    // 将返回的解析值设置为变量
    $page_dump = parse_page(($_GET['p']), $query);

    // 检查是否匹配成功
    如果($page_dump[1]){
        回声 $page_dump[1];
    }别的 {
        回声“0”;
    }
}别的 {

    // 如果没有指定页面,则解析第 1 页。
    $page_dump = parse_page('1', $query);

    如果($page_dump[1]){
        回声 $page_dump[1];
    }别的 {
        echo '没有页面 =(';
    }
}
4

1 回答 1

3

你不想拆分字符串,你想捕获一个模式。为此,请使用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)

于 2011-02-14T03:04:32.173 回答