PHP | Регулярные вражения

Как правильно составить регулярное выражение для моей цели?

У меня есть строка:

Жанр1, жанр2, жанр3, жанр4

Мне надо пройти валидацию с помощью регулярного выражения. Я написал вот таоке:

[a-zA-Zа-яА-Яё-]+,

Все бы хорошо, но это работает только на примере строки. Если использовать реальные данные, например:

второй шанс, в этот же мир, перерождение, хитрость и обман

То, вместо массива:

[
    'второй шанс'
    'в этот же мир'
    'перерождение'
    'хитрость и обман'
]

Я получу:

[
    'шанс'
    'мир'
    'перерождение'
    'обман'
]

Надеюсь, я объяснил свою проблему максимально понятно.

UPD: необходимо получить ВСЕ, кроме пробелов ВОКРУГ запятых и самих запятых.


Ответы (1 шт):

Автор решения: dIm0n

Вот так вот:

[\p{L}-—]+(?:\h[\p{L}-—]+)*(?=,)?

Тест https://regex101.com/r/ojQ1Hy/3:

втор-ой шанс, в эт—от же мир, перерождение, хитрость и обман

Сгенерированный код:

$re = '/[\p{L}-—]+(?:\h[\p{L}-—]+)*(?=,)?/m';
$str = '  втор-ой шанс, в эт—от же мир, перерождение, хитрость и обман';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);
→ Ссылка