Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_replace仅替换部分输入?(正则表达式帮助)_Php_Regex_Preg Replace_Bbcode - Fatal编程技术网

Php preg_replace仅替换部分输入?(正则表达式帮助)

Php preg_replace仅替换部分输入?(正则表达式帮助),php,regex,preg-replace,bbcode,Php,Regex,Preg Replace,Bbcode,我有这个功能,这是我的网站上的BBCODE使用。我正在使用preg_替换 function makebbcode($bbpost) { $bbfind = array( '~\@(.*?)~s' ); $bbreplace = array( '<a href="http://www.google.com">@$1</a>' ); $bbpost = preg_replace($bbfind, $bbr

我有这个功能,这是我的网站上的BBCODE使用。我正在使用preg_替换

function makebbcode($bbpost) {
    $bbfind = array(
        '~\@(.*?)~s'
    );
    $bbreplace = array(
        '<a href="http://www.google.com">@$1</a>'
    );
    $bbpost = preg_replace($bbfind, $bbreplace, $bbpost);
    //Once BBcodes and icons are put in, return.
    return $bbpost;
}
函数makebbcode($bbpost){
$bbfind=数组(
“~\@(.*)s”
);
$bbreplace=数组(
''
);
$bbpost=preg_replace($bbfind,$bbreplace,$bbpost);
//输入代码和图标后,返回。
退回$bbpost;
}
这一点是为了让它成为你可以把@username和它成为一个链接到他们的个人资料。(www.google.com是一个测试示例。)但代码只是将@符号作为链接,而不是整个@用户名


尽管如此,出于某种原因,它似乎完全忽略了(.*)。我肯定我的正则表达式是关闭的,但我不能确切地知道什么是关闭的,而且我在网上找不到任何有帮助的东西。。。或者至少是我能理解的东西。(regex初学者)

惰性量词
正在尽可能少地匹配单词。
在本例中,这意味着0次

尝试删除

或者在后面加上一些东西,迫使它与单词匹配


示例:
\@(.*?)$

Ungreedy
(.*?
如果后面没有其他内容,则没有多大意义。输入文本的示例是什么?如果建议使用
$
锚定,为什么要使用
?如果最后出现
$
,-
*?
将始终匹配整个字符串,不管它是否贪婪。如果没有某种锚,它将不匹配任何内容。没错。但是有了
$
锚定
就没用了
@(.*)$
regex与
@(.*)$
表达式是有效的。你是否认为这没用是你的意见。regex中没有这样的规则。@mega:它被否决了,因为在
@(.*?$
正则表达式
中,量词没有任何意义,他们决定毫无理由地争论,而不是修正它。