如何在非字母/非破折号上preg_split()?

时间:2015-08-25 18:37:51

标签: php regex pcre

我需要拆分既不是\p{L}也不是-的字符。我有点困惑。 \P{L}|[^-]显然无效,因为所有内容都与[^-]匹配。我不知道如何在[]内放置一个Unicode类。 Lookahead / lookbehind将锁定前一个/后一个字符。

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

2 个答案:

答案 0 :(得分:3)

只需使用一个negated character class

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

这将分为+ 一个或多个字符,这些字符既不是unicode letter \pL也不是短划线-

请参阅test at regex101eval.in

答案 1 :(得分:1)

你实际上可以分开:

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

哪个匹配任何不是unicode字母而不是破折号的字符。

RegEx Demo