首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >preg_match必须以"/“结尾?

preg_match必须以"/“结尾?
EN

Stack Overflow用户
提问于 2011-02-12 05:05:17
回答 4查看 1.2K关注 0票数 0

在下面的preg_match中,我将与两个静态字符串$url和$my_folder进行比较...

代码语言:javascript
复制
  $url = get_bloginfo('url')
//$url = 'http://site.com'

  $my_folder = get_option('my_folder');
//$my_folder = 'http://site.com/somefolder;

当$my_folder字符串有一个尾部斜杠时,我得到一个匹配项

代码语言:javascript
复制
 http://somefolder/go/

但这并不会产生匹配...

代码语言:javascript
复制
 http://somefolder/go

然而,另一个问题是,这也符合...

代码语言:javascript
复制
 http://somefolder/gone

代码是...

代码语言:javascript
复制
$my_folder =  get_option('rseo_nofollow_folder');
if($my_folder !=='') $my_folder = trim($my_folder,'/');
$url = trim(get_bloginfo('url'),'/');

preg_match_all('~<a.*>~isU',$content["post_content"],$matches);

for ( $i = 0; $i <= sizeof($matches[0]); $i++){
    if($my_folder !=='')
    {
    //HERES WHERE IM HAVING PROBLEMS

        if ( !preg_match( '~nofollow~is',$matches[0][$i]) 
            && (preg_match('~' . $my_folder . '/?$~', $matches[0][$i]) 
            || !preg_match( '~'. $url .'/?$~',$matches[0][$i])))
        {
            $result = trim($matches[0][$i],">");
            $result .= ' rel="nofollow">';
            $content["post_content"] = str_replace($matches[0][$i], $result, $content["post_content"]);
        }
    }
    else
    {
    //THIS WORKS FINE, NO PROBLEMS HERE
        if ( !preg_match( '~nofollow~is',$matches[0][$i]) && (!preg_match( '~'.$url.'~',$matches[0][$i]))) 
            {
            $result = trim($matches[0][$i],">");
            $result .= ' rel="nofollow">';
            $content["post_content"] = str_replace($matches[0][$i], $result, $content["post_content"]);
            }
    }
}
return $content;
EN

回答 4

Stack Overflow用户

发布于 2011-02-12 05:12:39

~^http://somefolder/go(?:/|$)~

票数 0
EN

Stack Overflow用户

发布于 2011-02-12 05:15:11

您需要首先删除尾部的斜杠,然后添加“/?”在regexp的末尾

代码语言:javascript
复制
$my_folder = trim($my_folder,'/');
$url = trim(get_bloginfo('url'),'/');

if ( !preg_match( '~nofollow~is',$matches[0][$i]) 
    && (preg_match('~' . $my_folder . '/?$~', $matches[0][$i]) 
    || !preg_match( '~'. $url .'/?$~',$matches[0][$i])))
票数 0
EN

Stack Overflow用户

发布于 2011-02-12 05:24:54

这是一种胡思乱想,但请尝试:

代码语言:javascript
复制
preg_match( '/' . preg_quote( get_bloginfo('url'), '/' ) . '?/', $matches[0][$i] )

您可以使用任何字符来代替/字符。我猜你是在使用wordpress,并且猜测get_bloginfo('url')被规范化为总是有一个尾随斜杠。如果是这种情况,最后一个斜杠将可选地由正则表达式末尾的?选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4974046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档