PHP 8.4.0 RC4 available for testing

mb_ereg_search_setpos

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

mb_ereg_search_setposSonraki düzenli ifade eşleşmesinin başlangıç noktasını tanımlar

Açıklama

mb_ereg_search_setpos(int $başlangıç): bool

mb_ereg_search_setpos() işlevi, mb_ereg_search() işlevi için başlangıç noktası tanımlar.

Bağımsız Değişkenler

başlangıç

Başlangıç noktası olarak tanımlanacak konum. Negatifse dizinin sonundan itibaren sayılan konumu belirtir.

Dönen Değerler

Başarı durumunda true, başarısızlık durumunda false döner.

Sürüm Bilgisi

Sürüm: Açıklama
7.1.0 başlangıç artık negatif olabiliyor.

Notlar

Bilginize:

Bu işlev karakter kodlaması olarak dahili kodlamayı veya mb_regex_encoding() işlevi tarafından belirtilen karakter kodlamasını kullanır.

Ayrıca Bakınız

  • mb_regex_encoding() - Çok baytlı düzenli ifade işlevleri için geçerli kodlamayı dizge olarak atar/döndürür
  • mb_ereg_search_init() - Çok baytlı düzenli ifade eşleşmesi için kullanılacak dizge ve düzenli ifadeyi tanımlar

add a note

User Contributed Notes 1 note

up
-1
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