2010-01-12 119 views
12

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

它可能会改变它的原因,部分关键字可以是用户定义的,如page_date_Y这可能会显示创建页面的年份。

因此,我只需要搜索并返回这些*字符之间的内容。这是可能的,或者如果我不知道“关键字”长度或者我可能是什么,是否有更好的方法来做到这一点?

+0

我发现了一个超级漂亮函数,它正是我想要的,但是,我希望把所有找到的关键字到一个数组。 http://www.justin-cook.com/wp/2006/03/31/php-parse-a-string-between-two-strings/有没有人有关于如何修改该脚本的提示? – 2010-01-12 07:24:29

+0

我希望用户不能定义一个关键字,其中*) – zombat 2010-01-12 07:26:18

+0

我正在使用上面的链接功能,你已经给予,它的工作适合我... – Avinash 2010-01-12 07:30:55

回答

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" 
} 
+3

太棒了!这么简单。谢谢! – 2010-01-12 07:27:19

+1

简单而强大的答案......欢呼! – VKGS 2011-05-26 10:49:35

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

爆炸的 “*”

​​

输出

$ php test.php 
best 
its 
most popular 
I 
相关问题