Получить текст между двумя тегами - PullRequest
1 голос
/ 02 июля 2011

Как я могу получить значение из следующих тегов:

{desc=1}
This is a description
{/desc}

Число в {desc=1} меняется. Я тоже хочу получить значение.

ОБНОВЛЕНИЕ:

также может быть больше desc в строке, например

{desc=1}
    This is a description
{/desc} 
{desc=2}
    other description
{/desc}
...

Ответы [ 3 ]

5 голосов
/ 02 июля 2011

Это будет захватывать все, что вы хотите.

$data = <<<EOT
{desc=1}
    This is a description
{/desc}
{desc=2}
    other description
{/desc}
EOT;

preg_match_all('#{desc=(\d+)}(.*?){/desc}#s', $data, $matches);

var_dump($matches);

Вывод:

array(3) {
  [0]=>
  array(2) {
    [0]=>
    string(44) "{desc=1}
    This is a description
{/desc}"
    [1]=>
    string(40) "{desc=2}
    other description
{/desc}"
  }
  [1]=>
  array(2) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
  }
  [2]=>
  array(2) {
    [0]=>
    string(29) "
    This is a description
"
    [1]=>
    string(25) "
    other description
"
  }
}
1 голос
/ 17 декабря 2014

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

<?php
  // Create the Function to get the string
  function GetStringBetween ($string, $start, $finish) {
  $string = " ".$string;
  $position = strpos($string, $start);
  if ($position == 0) return "";
  $position += strlen($start);
  $length = strpos($string, $finish, $position) - $position;
  return substr($string, $position, $length);
  }
?>

, и вот пример использования для вашего вопроса

$string1="
{desc=1}
 This is a description
{/desc}";

$string2="
{desc=1}
 This is a description
{/desc}
{desc=2}
  other description
{/desc}";

echo GetStringBetween ($string1, "{desc=1}", "{/desc}");
echo GetStringBetween ($string2, "{desc=1}", "{/desc}");
echo GetStringBetween ($string2, "{desc=2}", "{/desc}");

Для получения дополнительной информации.подробнее читайте http://codetutorial.com/howto/how-to-get-of-everything-string-between-two-tag-or-two-strings.

0 голосов
/ 27 февраля 2013

попробуйте это

function getInbetweenStrings($start, $end, $str){
    $matches = array();
    $regex = "/$start([a-zA-Z0-9_]*)$end/";
    preg_match_all($regex, $str, $matches);
    return $matches[1];
}

$str = "{attr1}/{attr2}/{attr3}";
$str_arr = getInbetweenStrings('{', '}', $str);

print_r($str_arr);

в приведенном выше примере {и} являются тегами, между ними извлекается строка.

...