如何修复preg_match()未知修饰符'?在localeconv()中

时间:2019-04-28 10:40:32

标签: php regex preg-match

'decimal_point' => string '/'

中的问题

但是没有人有好的解决方案吗?

错误

  preg_match() unknown modifier '?'

功能:

     * @param   string  $str    input string
     * @return  boolean
     */
    public static function numeric($str)
    {
        // Get the decimal point for the current locale
        list($decimal) = array_values(localeconv());

        // A lookahead is used to make sure the string contains at least one digit (before or after the decimal point)

         return (bool) preg_match('/^-?+(?=.*[0-9])[09]*+'.preg_quote($decimal).'?+[0-9]*+$/D', (string) $str); 
}

这是localeconv()转储:

array (size=18)
  'decimal_point' => string '/' (length=1)
  'thousands_sep' => string ',' (length=1)
  'int_curr_symbol' => string 'IRR' (length=3)
  'currency_symbol' => string 'ريال' (length=8)
  'mon_decimal_point' => string '/' (length=1)
  'mon_thousands_sep' => string ',' (length=1)
  'positive_sign' => string '' (length=0)
  'negative_sign' => string '-' (length=1)
  'int_frac_digits' => int 2
  'frac_digits' => int 2
  'p_cs_precedes' => int 0
  'p_sep_by_space' => int 0
  'n_cs_precedes' => int 0
  'n_sep_by_space' => int 0
  'p_sign_posn' => int 3
  'n_sign_posn' => int 3
  'grouping' => 
    array (size=1)
      0 => int 3
  'mon_grouping' => 
    array (size=1)
      0 => int 3

github上的相关问题 koseven/issues #351

1 个答案:

答案 0 :(得分:0)

由于您在正则表达式中使用with pd.option_context('display.max_rows', None, 'display.max_columns', None): print(df) 作为分隔符,因此也将它作为第二个参数传递给preg_quote函数:

/

手册引用:

  

请注意,/不是特殊的正则表达式字符。

     

[...]

     

定界符
  如果指定了可选的定界符,则也将对其进行转义。这对于转义所需的定界符很有用   通过PCRE功能。 /是最常用的定界符。