假设我有一个字符串,"快速的棕色狐狸"我想找到索引13之前或之前的空白字符的最后一次出现:
01234567890123456789
The quick brown fox
^
我该怎么做?我想对\s
使用反向正则表达式搜索,但我不认为PHP支持在偏移之前向后搜索。有没有其他方法可以有效地做到这一点?
答案 0 :(得分:2)
$string='the quick brown fox';
$ind=13;
function findWS($string,$ind)
{
$string=substr($string,0,$ind+1);
preg_match('/\s*[^\s]+$/',$string,$match,PREG_OFFSET_CAPTURE );
if(isset($match[0][1])) return $match[0][1]; else return -1;
}
$v=findWS($string,$ind);
echo $v;
答案 1 :(得分:1)
我认为只要$pattern
只匹配一个字符,这个就会起作用:
function rePosRev($subject, $pattern, $offset=null) {
if($offset === null) $offset = strlen($subject);
$search_str = strrev(substr($subject, 0, $offset));
if(preg_match($pattern, $search_str, $m, PREG_OFFSET_CAPTURE)) {
return $offset - $m[0][1] - 1;
}
return false;
}
echo rePosRev("The quick brown fox", '~\s~', 13); // 9