mb_ereg

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

mb_eregマルチバイト対応の正規表現マッチ

説明

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

マルチバイト対応の正規表現マッチを行います。

パラメータ

pattern

検索パターン。

string

検索文字列

regs

pattern 内のカッコで囲まれた部分文字列にマッチするものが あった場合、第3引数 regs が指定されていると、 配列 regs の要素としてマッチ結果が格納されます。 マッチするものがなかった場合、regs は空の配列となります。

$regs[1] には最初の左括弧で指定された部分文字列が入ります。 $regs[2] には2番目の左括弧で指定された部分文字列が入ります。 以下同様です。 $regs[0] にはマッチした文字列全体のコピーが入ります。

返り値

string 内に pattern にマッチする文字列があったらマッチした文字列のバイト長を返し、 マッチしなかった場合やエラーが起こった場合は FALSE を返します。

オプションのパラメータ regs が渡されなかった場合、 あるいはマッチした文字列の長さが 0 だった場合、 この関数は 1 を返します。

変更履歴

バージョン 説明
7.1.0 マッチしなかった場合、mb_ereg()regs を空の配列とするようになりました。 以前は regs を変更しませんでした。

注意

注意:

内部エンコーディングあるいは mb_regex_encoding() で指定した文字エンコーディングを、 この関数の文字エンコーディングとして使用します。

参考

  • mb_regex_encoding() - 現在のマルチバイト正規表現用のエンコーディングを取得または設定する
  • mb_eregi() - Regular expression match ignoring case with multibyte support

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
8 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
5 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