Just a quick addition to the last post -
modifying the regular expression for the www clause to include a newline at the begining will allow it to catch URLs that are the first in a line but not the first in a string. The previous version would only catch them if a space preceded the value...
// match www.something
$text = ereg_replace("(^| |\n)(www([.]?[a-zA-Z0-9_/-])*)", "\\1<a href=\"http://\\2\">\\2</a>", $text);
ereg_replace
(PHP 4, PHP 5)
ereg_replace — reemplaza expresiones regulares
Descripción
Esta función examina string buscando coincidencias de pattern , y reemplaza el texto encontrado con replacement .
Devuelve la cadena modificada. Si no hay coincidencias que reemplazar, devuelve la cadena original.
Si pattern contiene subcadenas entre paréntesis, replacement puede contener subcadenas de la forma \\cifra, que serán reemplazadas por el texto que coincide con la subcadena entre paréntesis que ocupa el lugar indicado por la cifra; \\0 produce el contenido total de la cadena. Se pueden usar hasta nueve subcadenas. Los paréntesis pueden anidarse; en este caso se cuentan los paréntesis de apertura.
Si no se encuentran coincidencias en string , se devuelve string sin cambios.
Por ejemplo, el siguiente fragmento de código imprime "This was a test" tres veces:
Example #1 ereg_replace() example
$string = "This is a test";
echo ereg_replace( " is", " was", $string );
echo ereg_replace( "( )is", "\\1was", $string );
echo ereg_replace( "(( )is)", "\\2was", $string );
Ver también ereg(), eregi(), y eregi_replace().
ereg_replace
03-Jul-2008 09:52
04-May-2008 04:57
In response to a post above, his coding was a bit wrong. The correct coding should be :
<?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);
// return $text
return $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
?>
29-Feb-2008 06:29
If you're not relying on regular expressions, str_replace() can be far faster.
20-Jan-2008 07:02
Code:
<?php
$s = "Coding PHP is fun.";
$pattern = "(.*)PHP(.*)";
$replacement = " They say \\1other languages\\2";
print ereg_replace($pattern, $replacement, $s);
?>
Output:
They say Coding other languages is fun.
Explanation:
"PHP" is replaced with "other languages", and the sentence is changed a little, using \1 and \2 to access the parts within parentheses.
http://php-regex.blogspot.com/
30-Sep-2007 03:27
It's worth mentioning for ultimate clarity that you're safest using double quotes when matching a pattern, since without them, metacharacters will be interpreted as a backslash plus another character.
Granted, this is part of the language syntax for the string type, but it might not be quite so obvious when dealing with patterns in this function, which is taking the pattern as a parameter.
So if you find that '[\n]' is taking the 'n' out of your string and leaving the new lines alone, switch to doubles before changing anything else.
26-Aug-2007 11:42
For simple patterns like "[a-z]", preg_replace is up to 6 times faster than ereg_replace.
30-May-2007 03:40
Your right but you just need to replace by :
<?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);
}
?>
16-May-2007 03:03
cristiklein's hyperlink function is nice but works incorrect with a www-string like this
\r\nwww.google.se
then it does not become a hyperlink
06-Apr-2007 06:33
Function to strip an HTML tag out of a string. I use this in part for parsing XML documents.
<?php
function stripTags($tag, $string) {
// Regular expressions only work with strings if the regexp has been pre-concocted
$regExp = "<" . "$tag" . "[^>]*>";
$string = str_replace("</$tag>", "", $string);
$string = ereg_replace($regExp, "", $string);
return $string;
}
?>
25-May-2006 09:59
Use mb_ereg_replace() instead of ereg_replace() when working with multi-byte strings!
13-Feb-2006 02: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;
}
20-Jan-2006 08: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);
}
?>
21-Dec-2005 06: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". */
?>
23-Aug-2005 12: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
?>
07-Jul-2005 12: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".
05-Jul-2005 01: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);
}
09-Apr-2005 11: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
?>
02-Mar-2005 11: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
27-Feb-2005 08: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.
