Php получить строку между тегами

Я получил строку, подобную этой (Joomla all video plugin)

{Vimeo}123456789{/Vimeo} 

где 123456789 является переменной, как я могу извлечь это? Должен ли я использовать регулярное выражение?

Related of "Php получить строку между тегами"

Если вы должны использовать регулярное выражение, следующее будет делать трюк.

 $str = 'foo {Vimeo}123456789{/Vimeo} bar'; preg_match('~{Vimeo}([^{]*){/Vimeo}~i', $str, $match); var_dump($match[1]); // string(9) "123456789" 

Это может быть больше, чем вы хотите, но вот способ избежать регулярного выражения.

 $str = 'foo {Vimeo}123456789{/Vimeo} bar'; $m = substr($str, strpos($str, '{Vimeo}')+7); $m = substr($m, 0, strpos($m, '{/Vimeo}')); var_dump($m); // string(9) "123456789" 

Вот еще одно решение для вас

 $str = "{Vimeo}123456789{/Vimeo}"; preg_match("/\{(\w+)\}(.+?)\{\/\\1\}/", $str, $matches); printf("tag: %s, body: %s", $matches[1], $matches[2]); 

Вывод

 tag: Vimeo, body: 123456789 

Или вы можете построить его в такой функции

 function getTagValues($tag, $str) { $re = sprintf("/\{(%s)\}(.+?)\{\/\\1\}/", preg_quote($tag)); preg_match_all($re, $str, $matches); return $matches[2]; } $str = "{Vimeo}123456789{/Vimeo} and {Vimeo}123{/Vimeo}"; var_dump(getTagValues("Vimeo", $str)); 

Вывод

 array(2) { [0]=> string(9) "123456789" [1]=> string(3) "123" } 

Вы можете попробовать следующее:

 $string = '{Vimeo}123456789{/Vimeo} '; echo extractString($string, '{Vimeo}', '{/Vimeo}'); function extractString($string, $start, $end) { $string = " ".$string; $ini = strpos($string, $start); if ($ini == 0) return ""; $ini += strlen($start); $len = strpos($string, $end, $ini) - $ini; return substr($string, $ini, $len); } 

Да, вы можете использовать regex.Like:

 preg_match_all('/{Vimeo}(.*?){\/Vimeo}/s', $yourstring, $matches); 

Если наращивание всегда похоже на то, что вы также можете заменить теги ничем

 $string = '{Vimeo}123456789{/Vimeo}'; str_replace(array('{Vimeo}', '{/Vimeo}'), '', $string);