PHP 正则表达式:什么是“偏移量为 0 的类”?

2022-08-30 14:51:14

我试图使用一个简单的正则表达式和php preg_replace函数从字符串中删除所有标点符号,尽管我得到以下错误:

编译失败:仅在偏移量为 0 的类中支持 POSIX 命名类

我想这意味着我不能在偏移量为0的类之外使用POSIX命名的类。我的问题是,当它说“在偏移量为0的类内”时,它是什么意思?

$string = "I like: perl";    

if (eregi('[[:punct:]]', $string))  
    $new = preg_replace('[[:punct:]]', ' ', $string); echo $new;

答案 1

preg_* 函数需要与 Perl 兼容的带有分隔符的正则表达式。所以试试这个:

preg_replace('/[[:punct:]]/', ' ', $string)

答案 2

注意:PHP 的 PCRE 实现不需要 g 修饰符!

除了 Gumbo 的答案之外,使用修饰符替换所有出现的标点符号:g

preg_replace('/[[:punct:]]/g', ' ', $string)
//                         ^

来自Johnathan Lonowski(见评论):

> [The g modifier] means "Global" -- i.e., find all existing matches. Without it, regex functions will stop searching after the first match.

推荐