Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 Regex帮助添加rel=";nofollow";指向与预定义URL模式匹配的链接_Php_Regex - Fatal编程技术网

Php Regex帮助添加rel=";nofollow";指向与预定义URL模式匹配的链接

Php Regex帮助添加rel=";nofollow";指向与预定义URL模式匹配的链接,php,regex,Php,Regex,下面的函数解析从筛选器传递的内容,并将rel=“nofollow”添加到它找到的所有外部链接,当前跳过所有内部链接 假设我在一个变量中定义了一个文件夹路径,比如 $my_folder = "http://mysite.com/recommends/"; 我该如何扩展该函数,以便它也能将nofollow广告到与此模式匹配的链接?这些可能是内部链接,在本例中,这些可能是我不想遵循的唯一内部链接,因此它们需要从内部链接regex位中排除 add_filter('wp_insert_post_data

下面的函数解析从筛选器传递的内容,并将rel=“nofollow”添加到它找到的所有外部链接,当前跳过所有内部链接

假设我在一个变量中定义了一个文件夹路径,比如

$my_folder = "http://mysite.com/recommends/";
我该如何扩展该函数,以便它也能将nofollow广告到与此模式匹配的链接?这些可能是内部链接,在本例中,这些可能是我不想遵循的唯一内部链接,因此它们需要从内部链接regex位中排除

add_filter('wp_insert_post_data', 'new_content' );
function new_content($content) {
preg_match_all('~<a.*>~isU',$content["post_content"],$matches);
for ( $i = 0; $i <= sizeof($matches[0]); $i++){
    if ( !preg_match( '~nofollow~is',$matches[0][$i])
        && !preg_match( '~'.get_bloginfo('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;
add_filter('wp_insert_post_data','new_content');
函数新内容($content){
preg_match_all(“~~isU',$content[“post_content”],$matches);

对于($i=0;$i我没有办法尝试,因为我不是WP用户,但假设您的内部循环将
$matches[0][$i]
定义为要比较的当前url:


add_filter('wp_insert_post_data', 'new_content' );
    function new_content($content) {
    $my_folder =  "http://mysite.com/recommends/";
    preg_match_all('~<a.*>~isU',$content["post_content"],$matches);
    for ( $i = 0; $i <= sizeof($matches[0]); $i++){
        if ( !preg_match( '~nofollow~is',$matches[0][$i])
            && (preg_match('~' . $my_folder . '~', $matches[0][$i]) 
               || !preg_match( '~'.get_bloginfo('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;
}

添加过滤器(“wp_插入_发布数据”、“新内容”);
函数新内容($content){
$my_文件夹=”http://mysite.com/recommends/";
preg_match_all(“~~isU',$content[“post_content”],$matches);

对于($i=0;$i,根据我的经验,使用dom解析器或xpath管理这些任务要容易得多。在我的初始测试中似乎工作得很好。关于preg_quote?你认为应该是这样的吗?&&(preg_match('~'.preg_quote($my_folder)。'~',$matches[0][$i])是的。为了安全起见,我不会伤害你。好吧,我想这是我最后一次真正写别人的代码,因为你甚至没有投票/接受它似乎没有什么帮助……Crashdown,更正这个:for($I=0;$I)