I have a php variable where I need to show #value Values as link pattern. The code looks like this.
$reg_exUrl = "/\#::(.*?)/";
// The Text you want to filter for urls
$text = "This is a #simple text from which we have to perform #regex operation";
// Check if there is a url in the text
if(preg_match($reg_exUrl, $text, $url)) {
// make the urls hyper links
echo preg_replace($reg_exUrl, '<a href="'.$url[0].'" rel="nofollow">'.$url[0].'</a>', $text);
} else {
// if no urls in the text just return the text
echo "IN Else #$".$text;
}
$reg_exUrl = "/\#::(.*?)/";
This doesn't match because of the following reasons
1. there is no need to escape #
, this is because it is not a special character.
2. since you want to match just #
followed by some words, there is no need for ::
3. (.*?)
tries to match the least possible word because of the quantifier ?
. So it won't match the required length of word you need.
If you still want to go by your pattern, you can modify it to
$reg_exUrl = "/#(.*?)\w+/"
See demo
But a more efficient one that still works is
$reg_exUrl = "/#\w+/"
. see demo
By using \w, you can match a word contains alphanumeric characters and underscore. Change your expression with this:
$reg_exUrl = "/#(.*?)\w+/"
It's not clear to me exactly what you need match. If you want to replace a #
followed by any word chars:
$text = "This is a #simple text from which we have to perform #regex operation";
$reg_exUrl = "/#(\w+)/";
echo preg_replace($reg_exUrl, '<a href="$0" rel="nofollow">$1</a>', $text);
//Output:
//This is a <a href="#simple" rel="nofollow">simple</a> text from which we have to perform <a href="#regex" rel="nofollow">regex</a> operation
The replacement uses $0
to refer to the text matched and $1
the first group.