mb_ereg_search_setpos

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

mb_ereg_search_setposSet start point of next regular expression match

说明

mb_ereg_search_setpos ( int $offset ) : bool

mb_ereg_search_setpos() sets the starting point of a match for mb_ereg_search().

参数

offset

The position to set. If it is negative, it counts from the end of the string.

返回值

成功时返回 true, 或者在失败时返回 false

更新日志

版本 说明
7.1.0 Support for negative offsets has been added.

注释

Note:

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

参见

User Contributed Notes

phpnet at osps dot net 22-Sep-2021 04:25
This method, like mb_ereg_search_pos, appears to use byte offsets, not character offsets. This seems counter intuitive for the mb_* methods, which inherently take a "character" view of strings, as opposed to a "byte" based view. Even the mb_strpos method returns a character offset.

The following code reveals this byte-oriented behaviour:

<?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;
    }

?>
With character offsets, we would expect offsets 11 and above to return no search result, whereas what we see is:

<?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=
?>
PHP8中文手册 站长在线 整理 版权归PHP文档组所有