我一直在使用此功能
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);
}
由于年代久远,一切正常,但是现在我需要指定索引,例如在这样的代码中:
<abc>Max</def><abc>Mike</def><abc>Roy</def>
我想获得“麦克”,所以我想使用
get_string_between($string, "<abc>", "</def>", 1)
我找不到任何解决方案,也无法使用Regex。谢谢您的帮助。
答案 0 :(得分:1)
使用strpos
的$ offset参数跳过以前的事件。
答案 1 :(得分:1)
我看不出您为什么不能使用正则表达式的任何原因。 preg_quote
会在正则表达式中转义具有特殊含义的任何字符,以使其成为文字。传递定界符(在PHP中是任意的-通常使用斜杠/
)也可以逃脱该定界符。
<?php
declare (strict_types=1);
function get_string_between(string $string, string $start, string $end, int $index = 0)
{
if(false === ($c = preg_match_all('/' . preg_quote($start, '/') . '(.*?)' . preg_quote($end, '/') . '/us', $string, $matches)))
return false;
if($index < 0)
$index += $c;
return $index < 0 || $index >= $c
? false
: $matches[1][$index]
;
}
$s = '<abc>Max</def><abc>Mike</def><abc>Roy</def>';
var_dump(get_string_between($s, '<abc>', '</def>' )); // Max
var_dump(get_string_between($s, '<abc>', '</def>', 1)); // Mike
// negative means from the end
var_dump(get_string_between($s, '<abc>', '</def>', -1)); // Roy