php find # в строке с регулярным выражением

У меня есть переменная php, где мне нужно показать значения #value в качестве шаблона ссылки.
Код выглядит так.

$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;

}

0

Решение

$reg_exUrl = "/\#::(.*?)/";

Это не соответствует из-за следующих причин

1. нет необходимости убегать #Это потому, что это не специальный символ.

2. так как вы хотите соответствовать просто # после некоторых слов нет необходимости ::

3. (.*?) пытается найти наименьшее возможное слово из-за квантификатора ?, Таким образом, он не будет соответствовать требуемой длине слова, которое вам нужно.

Если вы все еще хотите использовать шаблон, вы можете изменить его на

$reg_exUrl = "/#(.*?)\w+/" Увидеть демонстрация

Но более эффективный, который все еще работает

$reg_exUrl = "/#\w+/", увидеть демонстрация

1

Другие решения

Используя \ w, вы можете сопоставить слово, содержащее буквенно-цифровые символы и подчеркивание. Измени свое выражение с этим:

$reg_exUrl = "/#(.*?)\w+/"
2

Мне не совсем понятно, что именно вам нужно, чтобы соответствовать. Если вы хотите заменить # сопровождаемый любым словом 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

Замена использует $0 ссылаться на соответствующий текст и $1 первая группа.

1
По вопросам рекламы [email protected]