PHP: ereg_replace - Manual

downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

ereg POSIX Regex

Last updated: Sat, 27 Jan 2007

view this page in

# ereg_replace

(PHP 3, PHP 4, PHP 5)

ereg_replace -- Replace regular expression

## Description

string ereg_replace ( string pattern, string replacement, string string )

This function scans `string` for matches to `pattern`, then replaces the matched text with `replacement`.

The modified string is returned. (Which may mean that the original string is returned if there are no matches to be replaced.)

If `pattern` contains parenthesized substrings, `replacement` may contain substrings of the form `\\`digit``, which will be replaced by the text matching the digit'th parenthesized substring; `\\0` will produce the entire contents of string. Up to nine substrings may be used. Parentheses may be nested, in which case they are counted by the opening parenthesis.

If no matches are found in `string`, then `string` will be returned unchanged.

For example, the following code snippet prints "This was a test" three times:

Пример 1. ereg_replace() example

`<?php
$string = "This is a test";
echo str_replace(" is", " was", $string);
echo ereg_replace("( )is", "\\1was", $string);
echo ereg_replace("(( )is)", "\\2was", $string);
?>`

One thing to take note of is that if you use an integer value as the `replacement` parameter, you may not get the results you expect. This is because ereg_replace() will interpret the number as the ordinal value of a character, and apply that. For instance:

Пример 2. ereg_replace() example

`<?php
/* This will not work as expected. */
$num = 4;
$string = "This string has four words.";
$string = ereg_replace('four', $num, $string);
echo $string; /* Output: 'This string has words.' */
/* This will work. */
$num = '4';
$string = "This string has four words.";
$string = ereg_replace('four', $num, $string);
echo $string; /* Output: 'This string has 4 words.' */
?>`

Пример 3. Replace URLs with links

`<?php $text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $text); ?>`

> Подсказка: preg_replace(), which uses a Perl-compatible regular expression syntax, is often a faster alternative to ereg_replace().

See also ereg(), eregi(), eregi_replace(), str_replace(), and preg_match().

add a note User Contributed Notes
ereg_replace
Joachim Kruyswijk
25-May-2006 12:59
`Use mb_ereg_replace() instead of ereg_replace() when working with multi-byte strings!`
chrish at shield dot on dot ca
12-Feb-2006 05:43
`I was having problems with Microsoft Outlook viewing forms within email. I was only able to see the first word of the text box after I used the following code.
If I entered words into the text box and used the enter key to give me a CRLF I could see in the returned data the %0D%0A string, so I assumed if I just used the ereg-replace as below it would just replace the %0D%0A with a single space...
function remove_extra_linebreaks($string) {
$new_string=ereg_replace("%0D%0A", " ", $string);
return $new_string;
}
But the form as displayed by Outlook only showed the text upto the first replaced string, then it was blank!
I could view the source of the email and it would show all of the text I expected.
The following will show the correct data in the form
function remove_extra_linebreaks($string) {
$new_string=ereg_replace("%0D%0A", '+', $string);
return $new_string;
}`
Chris
20-Jan-2006 11:43
`I've updated the function a little that was posted below. I use it to make database field names readable when making a header row. I needed it to quit putting a space in "GPA" and to put a space in between numbers and letters.
<?php
/**
* Converts "fieldcontainingGPAInMyDatabaseFrom2005"
* To "Field Containing GPA In My Database From 2005"
*/
function innerCapsToReadableText($text) {
$text = ereg_replace("([A-Z]) ", "\\1",ucwords(strtolower(ereg_replace("[A-Z]"," \\0",$text))));
return ereg_replace("([A-Za-z])([0-9])", "\\1 \\2", $text);
}
?>`
codergeek42 at users dot sourceforge.net
21-Dec-2005 09:15
`In response to "php dot net at lenix dot de," a cleaner (easier to read) method would be to type-cast the integer as a string by quoting it. For example:
<?php
$foo = 42;
echo ereg_replace ( "bar", "$foo" , "foobar" ); /* Would output "foo42". */
?>`
benlanc at ster dot me dot uk
22-Aug-2005 03:49
`Quite how I managed to get my previous post so wrong, I don't know. Correction follows:
<?php
/* function to turn InterCaps style strings (i.e. CSS Properties in Javascript) to human readable ones */
function deInterCaps($var){
return ucfirst(strtolower(ereg_replace("[A-Z]"," \\0",$var)));
}
$interCapsString = "aLoadOfNonsenseToDemonstrateTheFunction";
echo deInterCaps($interCapsString);
// output: A load of nonsense to demonstrate the function
?>`
php dot net at lenix dot de
07-Jul-2005 03:26
`One thing to take note of is that if you use an integer value as the replacement parameter, you may not get the results you expect. This is because ereg_replace() will interpret the number as the ordinal value of a character, and apply that.
If you're ever having trouble with this one there's an easy workarround:
instead of
<?php
$foo = 23;
echo ereg_replace ( "bar", $foo , "foobar" );
?>
just do
<?php
$foo = 23;
echo ereg_replace ( "bar", "" . $foo , "foobar" );
?>
to replace "bar" inside "foobar" with the string "23".`
zaczek at gmail dot com
05-Jul-2005 04:09
`If you want the function to process query strings, such as:
http://www.php.net/index.php?id=10%32&wp=test
modify the function as follows:
function hyperlink(&$text)
{
// match protocol://address/path/
$text = ereg_replace("[a-zA-Z]+://([-]*[.]?[a-zA-Z0-9_/-?&%])*", "<a href=\"\\0\">\\0</a>", $text);
// match www.something
$text = ereg_replace("(^| )(www([-]*[.]?[a-zA-Z0-9_/-?&%])*)", "\\1<a href=\"http://\\2\">\\2</a>", $text);
}`
cristiklein at yahoo dot com
09-Apr-2005 02:50
`Sometimes, you would like to match both styles of URL links that are common in chat windows:
http://www.yahoo.com
www.yahoo.com
You can do this by using the following code:
<?php
function hyperlink(&$text)
{
// match protocol://address/path/
$text = ereg_replace("[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*", "<a href=\"\\0\">\\0</a>", $text);
// match www.something
$text = ereg_replace("(^| )(www([.]?[a-zA-Z0-9_/-])*)", "\\1<a href=\"http://\\2\">\\2</a>", $text);
}
?>
You can use this function like this:
<?php
$line = "Check the links: www.yahoo.com http://www.php.net";
hyperlink($line);
// Now, all text that looks like a link becomes a link
?>`
bgoodman at osogrande dot com
02-Mar-2005 02:25
`When you are dealing with databases you can end up with quite a few \" to deal with. To ereg_replace all these with something else it requires you to \ the \ and \ the " so you end up with:
$var1 = '\"';
$var2 = ereg_replace('\\\"','1234',$var1);
print $var2; //this should print 1234`
eerie at gmx dot net
27-Feb-2005 11:44
`<?php $path = ereg_replace("\\", "/", $path); ?>
as posted from mmtach at yahoo dot com causes an error because you have to escape the backslash twice, once for the quotation marks and a second time due the posix syntax.
<?php $path = ereg_replace("\\\\", "/", $path); ?>
or
<?php $path = ereg_replace('\\', "/", $path); ?>
should both work as expected. since you don't have to escape the backslash in brackets (posix syntax) his alternative works also.`
add a note
ereg POSIX Regex

Last updated: Sat, 27 Jan 2007
show source | credits | stats | sitemap | contact | advertising | mirror sites
Copyright © 2001-2007 The PHP Group
All rights reserved.
This mirror generously provided by: Yahoo! Inc.
Last updated: Sat Mar 10 10:36:09 2007 PST