pregsplit - 如何将字母数字字符和“_”组合在一起?

pregsplit - how to group together alphanumeric character and "_"?

我在 pregsplit 中有以下表达式:

$content = preg_split('/([\p{P}\p{S}])|\s/', $file, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

现在如果输入文件的内容是int somenumber;

它将拆分为:

int
somenumber
;

如果它是 int some_number; 我会得到的是:

int 
some
_
number
; 

不过,我想要的是:

int
some_number
;

有没有办法编辑此表达式以将字母数字字符 + “_”组合在一起?

_匹配\p{P}(标点属性class)。用 (?!_) 负前瞻限制它:

$content = preg_split('/((?!_)[\p{P}\p{S}])|\s/', 'int some_number;', -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

参见PHP demo and a regex demo

用这个(?!_)[\p{P}\p{S}],可以匹配除_以外的所有标点符号字符。