В вашем коде несколько ошибок.
Во-первых, ваше регулярное выражение
$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
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 возвращает не массив, а целое число, содержащее количество время нахождения шаблона в строке.
Тогда ваш скрипт становится:
$subject = "שלום לך";
$regexp = "#^[\p{Hebrew} a-zA-Z]{2,15}$#u";
preg_match($regexp, $subject, $m);
print_r($m);
person
Toto
schedule
11.02.2012