0

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;

 }
Mitul Maheshwari
  • 2,647
  • 4
  • 24
  • 38
  • Code runs. I am uncertain what you want. Could you please give us some test data and describe your expected output. Read [this](http://stackoverflow.com/help/mcve). – Shawn Mehan Sep 29 '15 at 18:29
  • Can you show an example and the expected output? – Mariano Sep 29 '15 at 18:57
  • You tagged regex-negation, what are you trying to negate? Where are you trying to match a URL? If you want the captured value you should be using `$url[1]`. – chris85 Sep 29 '15 at 19:18

3 Answers3

2

By using \w, you can match a word contains alphanumeric characters and underscore. Change your expression with this:

$reg_exUrl = "/#(.*?)\w+/"
Guney Cobanoglu
  • 733
  • 1
  • 6
  • 20
1

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.

Mariano
  • 6,423
  • 4
  • 31
  • 47
1

$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

james jelo4kul
  • 839
  • 4
  • 17