ScotlandPHP

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() - Set/Get character encoding for multibyte regex
  • mb_eregi() - Поиск соответствий регулярному выражению поддерживающий многобайтные символы и нечувствительный к регистру

add a note add a note

User Contributed Notes 5 notes

up
1
Riikka K
3 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
Anonymous
7 months 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
0
mb_ereg() seems unable to Use "named sub
2 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
pressler at hotmail dot de
4 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
Jon
8 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