我得到了一个像这样的字符串(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)
这是另一种解决方案
$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)