preg_grep():编译失败:在偏移量 0 处没有可重复的内容

Posted

技术标签:

【中文标题】preg_grep():编译失败:在偏移量 0 处没有可重复的内容【英文标题】:preg_grep(): Compilation failed: nothing to repeat at offset 0 【发布时间】:2018-06-22 07:07:20 【问题描述】:

将我的 php 从 5.3 更新到 7.1.9 后,我的 get_browser_language 函数不断收到此错误。

我尝试使用几种方法调试它,但没有运气,变量等都是正确的。

代码;

function get_browser_language( ) 
    global $cachedb;
    $available = array();
    $default = get_option('def_lang','tr');
    // List available
    $avails = $cachedb->get_results( "SELECT `lang_code` FROM  ".DB_PREFIX."languages");
    foreach ($avails as $av)
    $available[] = $av->lang_code;     
    
    if ( isset( $_SERVER[ 'HTTP_ACCEPT_LANGUAGE' ] ) ) 
        $langs = explode( ',', $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
    if ( empty( $available ) ) 
      return $default;
    
        foreach ( $langs as $lang )
            $lang = substr( $lang, 0, 2 );
            if( in_array( $lang, $available ) ) 
                return $lang;
            
            //Test for XX-nr
            $matches = preg_grep('/'.$lang.'/', $available);
            if($matches)  
            if(isset($matches[0]))             
            return $matches[0];
            
            
        
    
    return $default;

我不断收到$matches = preg_grep('/'.$lang.'/', $available);的警告

警告;

PHP Warning:  preg_grep(): Compilation failed: nothing to repeat at offset 0 ...

可能是什么问题?提前致谢!

【问题讨论】:

$lang的具体内容是什么?我猜某处有*+ @Toto $lang 的确切结果是 enroestr 【参考方案1】:

@Toto 通过他的评论给了我一个想法。花一些时间检查$_SERVER['HTTP_ACCEPT_LANGUAGE'] 值后,它有时会返回空值,我相信这就是我收到此警告的原因。

所以基本上我做了以下事情;

我变了

//Test for XX-nr
$matches = preg_grep('/'.$lang.'/', $available);

到这个;

//Test for XX-nr
if(ctype_alnum($lang))
    $matches = preg_grep('/'.$lang.'/', $available);
    //error_log(print_r("LANG: " . $lang, TRUE));

所以当$_SERVER['HTTP_ACCEPT_LANGUAGE']返回空结果时,它会返回默认的语言代码。

【讨论】:

以上是关于preg_grep():编译失败:在偏移量 0 处没有可重复的内容的主要内容,如果未能解决你的问题,请参考以下文章

PHP 5.6.10-preg_match():编译失败:字符类中的范围在偏移100处无效[重复]

在偏移量:0 处获得 TDS 响应中的意外值

编译失败:偏移量为4的字符类中的无效范围

以编程方式确定在一天/时间的偏移量处使用 UTC 时间

从正则表达式中得到错误“在偏移量 1 处没有重复的内容”

Flutter web 从 Uint8List 字节获取文件在偏移量 11 处缺少扩展类型