Php获取标签之间的字符串

时间:2014-09-12 21:38:44

标签: php regex

我有一个像这样的字符串(Joomla all video plugin)

{Vimeo}123456789{/Vimeo} 

其中123456789是可变的,我该如何提取? 我应该使用正则表达式吗?

5 个答案:

答案 0 :(得分:10)

如果必须使用正则表达式,以下操作就可以了。

$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"

答案 1 :(得分:5)

这是你的另一个解决方案

$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"
}

答案 2 :(得分:2)

您可以尝试这样:

$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);
}

答案 3 :(得分:1)

是的,你可以使用正则表达式。就像这样:

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

答案 4 :(得分:1)

如果累积总是那样,你也可以无需替换标签

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