В вашем коде несколько ошибок.
Во-первых, ваше регулярное выражение
$regexp="#^\p[{Hebrew}| ][a-zA-Z]{2,15}? \+$#u";
Вот что это значит:
# : regex delimiter
^ : begining of string
\p : character p
[{Hebrew}| ] : character class, one of the char : {, H, e, b, r, w, }, |, space
[a-zA-Z]{2,15}? : from 2 to 15 alphabetic char
\+ : a space followed by +
$ : end of string
# : regex delimiter
u : unicode
Юникод иврит символ: \p{Hebrew}
внутри класса char
нет необходимости |
в вашей строке нет +
, в конце нет пробела
нет необходимости делать несвязное сопоставление
так что это можно переписать как:
$regexp="#^[\p{Hebrew} a-zA-Z]{2,15}$#u";
Объяснение:
# : regex delimiter
^ : begining of string
[ : start class character
\p{Hebrew} : a hebrew character
: a space
a-zA-Z : a latin letter
] : end of class
{2,15} : previous chars 2 to 15 times
$ : end of string
# : regex delimiter
u : unicode
preg_match не возвращает массив, а int, который содержит количество раз, когда шаблон находится в строке.
Тогда ваш сценарий становится:
$subject = "שלום לך";
$regexp = "#^[\p{Hebrew} a-zA-Z]{2,15}$#u";
preg_match($regexp, $subject, $m);
print_r($m);