Мне нужно проверить, является ли строка допустимым регулярным выражением.
Есть ли способ сделать это без проблем с производительностью?
NB: Я хочу проверить его, прежде чем использовать его, preg_last_error () не то, что я ищу.
Предложенный preg_last_error
не будет работать для вас, потому что он возвращает только ошибки среды выполнения PCRE, а не ошибки компиляции. В последнем случае все, что вы получаете, – это предупреждение php («Ошибка компиляции»). Чистый способ обойти это – установить обработчик ошибок с ошибкой и исключить , а затем скомпилировать шаблон в блоке try-catch:
try { preg_match($pattern, "..."); } catch(ErrorException $e) { // something is wrong with the pattern }
Лучший способ – это просто попытаться запустить и скомпилировать его с помощью механизма Regex и проверить наличие ошибок. Я бы не стал беспокоиться о производительности, прежде чем понадобится.
В php я использую следующую функцию для проверки действительности pcre:
function BoolTestPregRegex($Regex) { $Result = @preg_match("/$Regex/", '1234567890123'); if ($Result === false) return false; else return true; }