php 使用正则表达式在字符串中查找 #

php find # in string with regex

我有一个 php 变量,我需要将 #value 值显示为 link 模式。 代码如下所示。

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

 }

通过使用\w,您可以匹配包含字母数字字符和下划线的单词。用这个改变你的表达方式:

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

我不清楚你到底需要匹配什么。如果要替换 # 后跟任何单词字符:

$text = "This is a #simple text from which we have to perform #regex    operation";

$reg_exUrl = "/#(\w+)/";
echo preg_replace($reg_exUrl, '<a href="[=10=]" rel="nofollow"></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

替换使用 [=12=] 来引用匹配的文本和 第一组。

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

这不匹配,原因如下

1.不需要转义#,因为不是特殊字符

2. 因为您只想匹配 # 后跟一些单词,所以不需要 ::

3. (.*?) 由于量词 ? 尝试匹配最少的单词。所以它不会匹配你需要的单词长度。

如果您仍然想按照您的模式进行,可以将其修改为

$reg_exUrl = "/#(.*?)\w+/" 参见 demo

但仍然有效的更有效的方法是

$reg_exUrl = "/#\w+/"。见 demo