免责声明:这两种解决方案都是幼稚的。你应该经常检查preg_match_all和strpos的返回值。
可读的正则表达式解决方案:
尝试使用preg_match_all
$fullstring = "this is [tag]dog[/tag], [tag]cat[/tag], [tag]lion[/tag]";
preg_match_all("'\[tag\](.*?)\[\/tag\]'si", $fullstring, $match);
foreach($match[1] as $val){
echo $val, ' ';
}
// result: dog cat lion
只获取第二个标签(现在是cat)的内容
echo $match[1][1]
// result: cat
不可读的字符串拆分解决方案:
$fullstring = 'this is [tag]dog[/tag], [tag]cat[/tag], [tag]lion[/tag]';
function get_strings_between(string $string, string $start, string $end): array {
$r = [];
$startLen = strlen($start);
$endLen = strlen($end);
while (!empty($string)) {
$startPosition = strpos($string, $start);
if ($startPosition === false) {
return $r;
}
$contentStart = $startPosition + $startLen;
$contentEnd = strpos($string, $end, $contentStart);
$len = $contentEnd - $contentStart;
$r[] = substr($string, $contentStart, $len);
$endPosition = $contentEnd + $endLen;
$string = substr($string, $endPosition);
}
return $r;
}
$match = get_strings_between($fullstring, '[tag]', '[/tag]');
// result: dog cat lion
只获取第二个标签(现在是cat)的内容
echo $match[1]
// result: cat