the manual Посмотрите, особенно функция подписи:
int preg_match (string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]])
он возвращает INT, 0, если нет совпадений найдено, 1 для совпадений. Если вы хотите, чтобы эти матчи, присвоенные переменной, вам придется пройти третий аргумент:
if (preg_match($pattern, $string, $matches))
{//if it returns 1, preg_match is true
var_dump($matches);
}
Прибавьте к тому, что вы сопрягая не-ASCII символов, for which there is a special man page, too, вы можете найти его матчи с двумя символами вместо трех. Поэтому вам придется прибегнуть к юникодам для этих специальных символов. š
м, например, соответствует /\u0160/
.
Более подробную информацию о регулярных выражениях + юникодом can be obtained here
Unicode символы являются «шире» (они занимают больше байт), но есть utf8-совместимый модификатор: u
:
var_dump(preg_match('+'. $pattern . '+u', $string, $matches));
var_dump($matches);
Сказав, что: я «немного огляделся, потому что PCRE предлагает имена скриптов для соответствия всему алфавиту в Юникоде. Быстрый взгляд на вики, а также некоторые другие источники говорит мне, что, возможно:
/\p{Cyrillic}/
может работать, но кириллица не совсем то же самое, во всяком случае, на the bottom of this page, вы можете найти таблицу, содержащую все Юникода коды для чешского алфавита.
Ни в коем случае вы можете винить PHP для этого ;-)
Как и в сторону, нанизывание картина все хорошо, но есть более безопасный способ: use the preg_quote
function:
string preg_quote (string $str [, string $delimiter = NULL ])
В вашей случае:
$pattern = preg_quote($reg, '+');
Если вы ищете символы, отличные от ascii, вам нужно включить модификатор 'u' в свой шаблон регулярного выражения. – Spudley
@wumm: + отлично: http://php.net/manual/en/regexp.reference.delimiters.php – Reeno
@Reeno, похоже, странный выбор, хотя использование + в качестве разделителя означает, что вы можете Использовать + в регулярном выражении? – OGHaza