ConFoo 2025

mb_ereg_search_setpos

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

mb_ereg_search_setposDefine o ponto de início para a próxima correspondência de expressão regular

Descrição

mb_ereg_search_setpos(int $offset): bool

mb_ereg_search_setpos() define o ponto de início de uma correspondência para mb_ereg_search().

Parâmetros

offset

A posição a definir. Se for negativo, conta a partir do final da string.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Registro de Alterações

Versão Descrição
7.1.0 Suporte para offsets negativo foi adicionado.

Notas

Nota:

A codificação interna ou a codificação de caracteres especificada por mb_regex_encoding() será usada como a codificação de caracteres para esta função.

Veja Também

  • mb_regex_encoding() - Define/Obtém codificação de caracteres para regex multibyte
  • mb_ereg_search_init() - Configura a string e a expressão regular para uma correspondência de expressão regular multibyte

adicione uma nota

Notas Enviadas por Usuários (em inglês) 1 note

up
-4
phpnet at osps dot net
3 years ago
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=
?>
To Top