php[world] 2018 - Call for Speakers

mb_ereg

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

mb_eregRecherche par expression rationnelle avec support des caractères multi-octets

Description

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

Recherche par expression rationnelle avec support des caractères multi-octets.

Liste de paramètres

pattern

Le masque de recherche.

string

La chaîne sur laquelle porte la recherche.

regs

Si des correspondances sont trouvées pour les sous-chaînes entre parenthèses de pattern et si la fonction est appelée avec le troisième argument regs, les correspondances seront stockées dans les éléments du tableau regs. Si aucune correspondance n'est trouvée, regs a pour valeur un tableau vide.

$regs[1] contiendra la sous-chaîne qui commence à la première parenthèse gauche; $regs[2] contiendra la sous-chaîne commençant à la seconde, et ainsi de suite. $regs[0] contiendra une copie de la chaîne complète assortie.

Valeurs de retour

Retourne la longueur d'octet de la chaîne trouvée si une correspondance pour pattern a été trouvée dans string, ou FALSE si aucune correspondance n'a été trouvée ou qu'une erreur s'est produite.

Si le paramètre facultatif regs n'a pas été passé ou si la longueur de la chaîne trouvée est 0, cette fonction retourne 1.

Historique

Version Description
7.1.0 mb_ereg() va maintenant affecter regs à un tableau vide, si rien ne correspond. Auparavant, les regs n'étaient pas modifiées dans ce cas.

Notes

Note:

L'encodage interne ou l'encodage des caractères spécifié par la fonction mb_regex_encoding() sera utilisé comme encodage de caractères pour cette fonction.

Voir aussi

  • mb_regex_encoding() - Définit/Récupère l'encodage des caractères pour les expressions rationnelles multi-octets
  • mb_eregi() - Expression rationnelle insensible à la casse avec le support des caractères multi-octets

add a note add a note

User Contributed Notes 7 notes

up
2
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
2
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
0
lastuser at example dot com
3 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
Never Do This !
4 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
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
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
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