Мне нужно разделить на символы, которые не являются ни \p{L}
, ни -
. Я немного смущен. \P{L}|[^-]
, очевидно, не будет работать, поскольку все будет соответствовать [^-]
. Я не знаю, как поместить класс Unicode внутри []
. Lookahead/lookbehind будет защелкнуть предыдущий/следующий символ.
Другими словами, мне нужно разделить foo-bar;dásh
на ['foo-bar', 'dásh']
.
Просто используйте один отрицательный класс символов для обоих:
$res = preg_split('/[^\pL-]+/u', $str);
Это будет разделено на +
один или несколько символов, которые не являются ни буквой \pL
ни тире -
См. Тест в regex101, eval.in
Вы можете разделить на:
/[^\p{L}-]/u
Это будет соответствовать любому символу, который не является буквой юникода, а не тире.