PHP:返回两个字符之间的字符串

时间:2010-01-12 07:15:31

标签: php regex string replace keyword

我想在大字符串中使用“关键字”。这些关键字使用 my_keyword 开始和结束,并且是用户定义的。如何在一个大字符串中搜索并查找两个*字符之间的内容并返回每个实例?

可能会对其进行更改的原因是,关键字的某些部分可以由用户定义,例如 page_date_Y ,这可能会显示创建页面的年份。

所以,再一次,我只需要进行搜索并返回这些*字符之间的内容。这是可能的,或者如果我不知道“关键字”的长度或我可能是什么,有更好的方法吗?

4 个答案:

答案 0 :(得分:42)

<?php
// keywords are between *
$str = "PHP is the *best*, its the *most popular* and *I* love it.";    
if(preg_match_all('/\*(.*?)\*/',$str,$match)) {            
        var_dump($match[1]);            
}
?>

输出:

array(3) {
  [0]=>
  string(4) "best"
  [1]=>
  string(12) "most popular"
  [2]=>
  string(1) "I"
}

答案 1 :(得分:3)

爆炸“*”

$str = "PHP is the *best*, *its* the *most popular* and *I* love it.";
$s = explode("*",$str);
for($i=1;$i<=count($s)-1;$i+=2){
    print $s[$i]."\n";    
}

输出

$ php test.php
best
its
most popular
I

答案 2 :(得分:0)

这里你去:

function stringBetween($string, $keyword)
{
    $matches = array();
    $keyword = preg_quote($keyword, '~');

    if (preg_match_all('~' . $keyword . '(.*?)' . $keyword . '~s', $string, $matches) > 0)
    {
        return $matches[1];
    }

    else
    {
        return 'No matches found!';
    }
}

使用这样的功能:

stringBetween('1 *a* 2 3 *a* *a* 5 *a*', '*a*');

答案 3 :(得分:0)

如果你想提取一个由两个不同的字符串包围的字符串(如括号,括号,html标签等中的内容),这里有一篇更具体的帖子:

Grabbing a String Between Different Strings