PHP: вернуть строку между двумя символами - PullRequest
12 голосов
/ 12 января 2010

Я хочу использовать "ключевые слова" в большой строке. Эти ключевые слова начинаются и заканчиваются с использованием my_keyword и определяются пользователем. Как в большой строке я могу найти и найти то, что находится между двумя * символами и вернуть каждый экземпляр?

Причина, по которой это может измениться, в том, что части ключевых слов могут быть определены пользователем, например, page_date_Y , которые могут указывать год, в который страница была создана.

Итак, опять же, мне просто нужно выполнить поиск и вернуть то, что находится между этими * символами. Возможно ли это, или есть лучший способ сделать это, если я не знаю длину "ключевого слова" или каким я могу быть?

Ответы [ 4 ]

42 голосов
/ 12 января 2010
<?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 голосов
/ 12 января 2010

взорваться на "*"

$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
0 голосов
/ 03 ноября 2012

Если вы хотите извлечь строку, которая заключена в две разные строки (например, в скобках, скобках, HTML-тегах и т. Д.), Вот более конкретный пост:

Перехват строки между разными строками

0 голосов
/ 12 января 2010

Вот, пожалуйста,

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*');
...