如何在 non-letter/non-dash 上 preg_split()?

How to preg_split() on non-letter/non-dash?

我需要拆分既不是 \p{L} 也不是 - 的字符。我有点困惑。 \P{L}|[^-] 显然不会工作,因为所有内容都会匹配 [^-]。我不知道如何将 Unicode class 放入 []。前瞻/后视将锁定前一个/后一个字符。

换句话说,我需要将foo-bar;dásh拆分成['foo-bar', 'dásh']

两个都用一个negated character class:

$res = preg_split('/[^\pL-]+/u', $str);

这将拆分为 + 一个或多个 个既不是 unicode letter \pL 也不是破折号 - 的字符

test at regex101, eval.in

你实际上可以拆分:

/[^\p{L}-]/u

这将匹配任何不是 unicode 字母和破折号的字符。

RegEx Demo