PHP拆分带有start和stop值的字符串

时间:2009-10-29 00:05:34

标签: php regex string

我已经骗了正则表达式,但似乎无法让它工作。我有一个名为includes / header.php的文件我正在将文件转换为一个大字符串,以便我可以提取代码的某一部分以粘贴到我的文档的html中。

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

从这里开始,我只想返回以<ul class="home">开头并以</ul>结尾的字符串

尽我所能找出一个我仍然困惑的表情。

一旦我修剪了弦,我就可以在我的页面上打印出来,但我无法弄清楚修剪部分

5 个答案:

答案 0 :(得分:1)

您可能需要一个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'

其中$ matches将包含它找到的匹配数组,因此您可以使用

从数组中获取所需的任何元素
$matchedstr[0];

将返回第一个元素。然后输出。

但是我有点警惕,正则表达式确实倾向于匹配令人惊讶的边缘情况,你需要提供实际数据以获得关于何时失败的可靠结果。但是,如果你只是传递模板,它应该没问题,只需做一些测试,看看它是否全部有效。如果不是,我仍然建议使用PHP XML Parser。

希望有所帮助。

答案 1 :(得分:1)

如果你需要真正的硬核,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] }

答案 2 :(得分:1)

我假设您遇到的困难与转义您用作分隔符的字符串中的正则表达式特殊字符有关。如果是这样,请尝试使用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]

答案 3 :(得分:0)

如果您不想使用正则表达式,可以使用字符串查找,我认为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>');

如果要在输出中包含终止字符串,则需要进行一些调整,但这应该可以帮助您入门!

答案 4 :(得分:0)

这是一种新颖的方式;我不保证这种技术的稳健性或性能,除了它对给定的例子有效:

$prefix = '<ul class="home">';
$suffix = '</ul>';
$result = $prefix . array_shift(explode($suffix, array_pop(explode($prefix, $str)))) . $suffix;