PHP | preg_match_all выдает по буквам

Есть регулярка:

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

Проверена на сайте: https://regex101.com/r/ojQ1Hy/3

Проблема в том, что Laravel, а точнее php, выдает мне ответ по буквам, хотя на сайте выдает по словам. Что я делаю не так?

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

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

Результат:

[0]=>
  array(1) {
    [0]=>
    string(1) "�"
  }
  [1]=>
  array(1) {
    [0]=>
    string(3) "е�"
  }
  [2]=>
  array(1) {
    [0]=>
    string(1) "�"
  }
  [3]=>
  array(1) {
    [0]=>
    string(5) "ер�"
  }
  [4]=>
  array(1) {
    [0]=>
    string(1) "�"
  }
  ...

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

Автор решения: Sire IMPACTUS

Разобрался. Проблема была в регулярном выражении:

/[(pL-—)]+(?:\h[(pL-—)]+)*(?=,)?/m

Вместо:

/[a-zA-Zа-яА-ЯёЁ-—]+(?:\h[a-zA-Zа-яА-ЯёЁ-—]+)*(?=,)?/mu <- и добавить модификатор u, чтобы кодировка была многобайтовой

→ Ссылка