У меня есть переменная 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;
}
$reg_exUrl = "/\#::(.*?)/";
Это не соответствует из-за следующих причин
1. нет необходимости убегать #
Это потому, что это не специальный символ.
2. так как вы хотите соответствовать просто #
после некоторых слов нет необходимости ::
3. (.*?)
пытается найти наименьшее возможное слово из-за квантификатора ?
, Таким образом, он не будет соответствовать требуемой длине слова, которое вам нужно.
Если вы все еще хотите использовать шаблон, вы можете изменить его на
$reg_exUrl = "/#(.*?)\w+/"
Увидеть демонстрация
Но более эффективный, который все еще работает
$reg_exUrl = "/#\w+/"
, увидеть демонстрация
Используя \ w, вы можете сопоставить слово, содержащее буквенно-цифровые символы и подчеркивание. Измени свое выражение с этим:
$reg_exUrl = "/#(.*?)\w+/"
Мне не совсем понятно, что именно вам нужно, чтобы соответствовать. Если вы хотите заменить #
сопровождаемый любым словом 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
первая группа.