Как preg_split () для не-буквы / не-тире?

1

Мне нужно разделить на символы, которые не являются ни \p{L}, ни -. Я немного смущен. \P{L}|[^-], очевидно, не будет работать, поскольку все будет соответствовать [^-]. Я не знаю, как поместить класс Unicode внутри []. Lookahead/lookbehind будет защелкнуть предыдущий/следующий символ.

Другими словами, мне нужно разделить foo-bar;dásh на ['foo-bar', 'dásh'].

Теги:
pcre

2 ответа

3
Лучший ответ

Просто используйте один отрицательный класс символов для обоих:

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

Это будет разделено на + один или несколько символов, которые не являются ни буквой \pL ни тире -

См. Тест в regex101, eval.in

1

Вы можете разделить на:

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

Это будет соответствовать любому символу, который не является буквой юникода, а не тире.

Демо-версия RegEx

Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню