mb_ereg_search_setpos

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

mb_ereg_search_setpos设置下一个正则表达式匹配的起点

说明

mb_ereg_search_setpos(int $offset): bool

mb_ereg_search_setpos()mb_ereg_search() 设置匹配的起点。

参数

offset

要设置的位置。如果为负数,则从字符串末尾开始计数。

返回值

成功时返回 true,失败时返回 false

变更日志

版本 说明
7.1.0 添加了对负 offset 的支持。

备注

注意:

内部编码或 mb_regex_encoding() 指定的字符编码将用作此函数的字符编码。

参见

添加注释

用户贡献的注释 1 个注释

phpnet at osps dot net
2 年前
此方法与 mb_ereg_search_pos 一样,似乎使用的是字节偏移量,而不是字符偏移量。这对于 mb_* 方法来说似乎违反直觉,因为这些方法本质上采用的是字符串的“字符”视图,而不是“字节”视图。甚至 mb_strpos 方法也返回字符偏移量。

以下代码揭示了这种面向字节的行为

<?php
$x
= 'abc456789'. "\u{1000}" .'abc4567890';
$re = 'ab.';
echo
'x='. $x .PHP_EOL;
echo
're='. $re .PHP_EOL;
mb_ereg_search_init( $x );
mb_internal_encoding( mb_detect_encoding( $x) );
echo
'mb_strlen='. mb_strlen( $x ) .PHP_EOL;
echo
'strlen='. strlen( $x ) .PHP_EOL;
foreach ( array(
0, 9, 10, 11, 12, 13 ) as $o ) {

mb_ereg_search_setpos( $o );
echo
'Offset='. $o
.' mb_substr='. mb_substr( $x, $o )
.
' substr='. substr( $x, $o )
.
' mb_ereg_search_regs='. print_r( mb_ereg_search_regs( $re ), true )
.
PHP_EOL;
}

?>
使用字符偏移量,我们预计偏移量 11 及以上的偏移量将不返回搜索结果,而我们看到的是

<?php

=abc456789ကabc4567890
re
=ab.
mb_strlen=20
strlen
=22
Offset
=0 mb_substr=abc456789ကabc4567890 substr=abc456789ကabc4567890 mb_ereg_search_regs=Array
(
[
0] => abc
)

Offset=9 mb_substr=ကabc4567890 substr=ကabc4567890 mb_ereg_search_regs=Array
(
[
0] => abc
)

Offset=10 mb_substr=abc4567890 substr=��abc4567890 mb_ereg_search_regs=Array
(
[
0] => abc
)

Offset=11 mb_substr=bc4567890 substr=�abc4567890 mb_ereg_search_regs=Array
(
[
0] => abc
)

Offset=12 mb_substr=c4567890 substr=abc4567890 mb_ereg_search_regs=Array
(
[
0] => abc
)

Offset=13 mb_substr=4567890 substr=bc4567890 mb_ereg_search_regs=
?>
To Top