我有一个函数返回两个标记词之间的第一个子串:
$opmerking = "This is an @Example@ or not? @Example2@ hehe.";
$tag = get_string_between($opmerking, '@', '@');
function get_string_between($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);
}
现在它返回第一个单词:$tag = "Example"
。
但我希望它返回一个数组,其中 all @
@
之间的单词。
可能是循环还是其他什么?
答案 0 :(得分:0)
传递偏移量,并在每次调用函数时更改它。
function get_string_between($string, $start, $end, $offset){
$string = ' ' . $string;
$ini = strpos($string, $start, $offset);
if ($ini == 0) return '';
$ini += strlen($start);
$len = strpos($string, $end, $ini, $offset) - $ini;
return substr($string, $ini, $len);
}
答案 1 :(得分:0)
你关闭了。只需按照您的想法使用循环:
function get_string_between($string, $open, $close) {
$matches = [];
$begin = 0;
while (false !== ($begin = strpos($string, $open, $begin))) {
$begin += strlen($open);
$end = strpos($string, $close, $begin);
if (false !== $end) {
$matches[] = substr($string, $begin, $end-$begin);
$begin = $end + strlen($close);
}
}
return $matches;
}
请注意,如果您期望大字符串和许多匹配项,则生成器可能更适合。