Php获取标签之间的字符串

asd*_*e32 7 php regex

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

{Vimeo}123456789{/Vimeo} 
Run Code Online (Sandbox Code Playgroud)

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

hwn*_*wnd 11

如果必须使用正则表达式,则以下操作将起作用.

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

这可能比您想要通过的更多,但这是一种避免正则表达式的方法.

$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"
Run Code Online (Sandbox Code Playgroud)


Tha*_*you 5

这是另一种解决方案

$str = "{Vimeo}123456789{/Vimeo}";

preg_match("/\{(\w+)\}(.+?)\{\/\\1\}/", $str, $matches);

printf("tag: %s, body: %s", $matches[1], $matches[2]);
Run Code Online (Sandbox Code Playgroud)

产量

tag: Vimeo, body: 123456789
Run Code Online (Sandbox Code Playgroud)

或者你可以把它构建成这样的函数

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));
Run Code Online (Sandbox Code Playgroud)

产量

array(2) {
  [0]=>
  string(9) "123456789"
  [1]=>
  string(3) "123"
}
Run Code Online (Sandbox Code Playgroud)