Не соответствует строке, в которой используется дефис (-) с использованием выражения регулятора

У меня регулярное выражение, как показано ниже.

$content = preg_replace_callback('/\{\%\s*block_(\w*)\s*\%\}/', function ($block){ 
 $block_file = $block[1].'.block';
}

когда {% block_contact_us %} приходит, он находит совпадение... но когда {% block_contact-us %} приходит с ошибкой.

1 ответ

Просто добавьте - в классе символов:

$content = preg_replace_callback('/\{\%\s*block_([\w-]*)\s*\%\}/', function ($block){ 
// here __^^^^^
 $block_file = $block[1].'.block';
}

[\w-] соответствует буквенно-цифровому, подчеркиванию и тире.

licensed under cc by-sa 3.0 with attribution.