PHPKonf Istanbul PHP Conference 2019 - Call for Papers

mb_ereg

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

mb_eregСовпадение с регулярным выражением с поддержкой многобайтовых кодировок

Описание

int mb_ereg ( string $pattern , string $string [, array &$regs ] )

Выполняет поиск совпадения с регулярным выражением с поддержкой многобайтовых кодировок.

Список параметров

pattern

Шаблон поиска.

string

Строка (string), в которой производится поиск.

regs

Если найдены совпадения для подстроки в скобках шаблона pattern и функция вызвана с третьим аргументом regs, совпадения будут сохранены в массиве regs. Если подобных совпадений найдено не будет, то regs установится как пустой массив.

$regs[1] будет содержать первую слева подстроку в скобках; $regs[2] - вторую, и так далее. $regs[0] будет содержать копию всей строки.

Возвращаемые значения

Возвращает длину найденной строки в байтах, либо FALSE, если совпадений в string для pattern не найдено, либо если возникла ошибка.

Если опциональный параметр regs не задан, либо длина совпавшей строки равна 0, эта функция вернет 1.

Список изменений

Версия Описание
7.1.0 Теперь mb_ereg() устанавливает regs равным пустому массиву (array), если ничего не найдено. Ранее в этом случае regs оставался неизменным.

Примечания

Замечание:

Для этой функции будет использована внутренняя кодировка или кодировка, установленная функцией mb_regex_encoding().

Смотрите также

  • mb_regex_encoding() - Устанавливает/получает текущую кодировку для многобайтового регулярного выражения
  • mb_eregi() - Поиск соответствий регулярному выражению с поддержкой многобайтовых символов без учета регистра

add a note add a note

User Contributed Notes 7 notes

up
4
Anonymous
1 year ago
Old link to Oniguruma regex syntax is not working anymore, there is a working one:
https://github.com/geoffgarside/oniguruma/blob/master/Syntax.txt
up
2
pressler at hotmail dot de
6 years ago
Note that mb_ereg() does not support the \uFFFF unicode syntax but uses \x{FFFF} instead:

<?PHP

$text
= 'Peter is a boy.'; // english
$text = 'بيتر هو صبي.'; // arabic
//$text = 'פיטר הוא ילד.'; // hebrew

mb_regex_encoding('UTF-8');

if(
mb_ereg('[\x{0600}-\x{06FF}]', $text)) // arabic range
//if(mb_ereg('[\x{0590}-\x{05FF}]', $text)) // hebrew range
{
    echo
"Text has some arabic/hebrew characters.";
}
else
{
    echo
"Text doesnt have arabic/hebrew characters.";
}

?>
up
0
lastuser at example dot com
8 months ago
I hope this information is shown somewhere on php.net.

According to "https://github.com/php/php-src/tree/PHP-5.6/ext/mbstring/oniguruma",
the bundled Oniguruma regex library version seems ...
4.7.1 between PHP 5.3 - 5.4.45,
5.9.2 between PHP 5.5 - 7.1.16,
6.3.0 since PHP 7.2 - .
up
0
mb_ereg() seems unable to Use &#34;named sub
3 years ago
mb_ereg() seems unable to Use "named subpattern".
preg_match() seems a substitute only in UTF-8 encoding.

<?php

$text
= 'multi_byte_string';
$pattern = '.*(?<name>string).*';        // "?P" causes "mbregex compile err" in PHP 5.3.5

if(mb_ereg($pattern, $text, $matches)){
    echo
'<pre>'.print_r($matches, true).'</pre>';
}else{
    echo
'no match';
}

?>

This code ignores "?<name>" in $pattern and displays below.

Array
(
    [0] => multi_byte_string
    [1] => string
)

$pattern = '/.*(?<name>string).*/u';
if(preg_match($pattern, $text, $matches)){

instead of lines 2 & 3
displays below (in UTF-8 encoding).

Array
(
    [0] => multi_byte_string
    [name] => string
    [1] => string
)
up
0
Riikka K
4 years ago
While hardly mentioned anywhere, it may be useful to note that mb_ereg uses Oniguruma library internally. The syntax for the default mode (ruby) is described here:

http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt
up
-1
Never Do This !
10 months ago
Do Not Identically compare (===/!==) "TRUE" with return value of mb_ereg().
eg
<?php
// This doesn't work.
if (mb_ereg('bad', 'bad_input') === true) {
// (or) if (mb_ereg('good', 'good_input') !== true) {
   
die('Get out of here !');
}else{
    echo
'safe';   // continue processing...
}
?>

// These work. (not using TRUE)
if (mb_ereg('bad', 'bad_input')) {.....
if (!mb_ereg('good', 'good_input')) {.....

mb_ereg() never returns TRUE, but False (in unmatch case) or Integer (in match case, >=1, which equals TRUE).
up
-1
Jon
9 years ago
Hebrew regex tested on PHP 5, Ubuntu 8.04.
Seems to work fine without the mb_regex_encoding lines (commented out).
Didn't seem to work with \uxxxx (also commented out).

<?php
echo "Line ";
//mb_regex_encoding("ISO-8859-8");
//if(mb_ereg(".*([\u05d0-\u05ea]).*", $this->current_line))
if(mb_ereg(".*([א-ת]).*", $this->current_line))
{
    echo
"has";
}
else
{
    echo
"doesn't have";
}
echo
" Hebrew characters.<br>";   
//mb_regex_encoding("UTF-8");
?>
To Top