PHP очистить регулярное выражение

Эй я могу очистить preg_match в php из этого:

preg_match_all("/(".$this->reg['wat'].")?(".$this->reg['wat'].")?(".$this->reg['wat'].")?(".$this->reg['wat'].")?(".$this->reg['wat'].")?(".$this->reg['wat'].")?(".$this->reg['wat'].")?/",$value,$match);

выглядеть так:

preg_match_all("/
   (".$this->reg['wat'].")?
   (".$this->reg['wat'].")?
   (".$this->reg['wat'].")?
   (".$this->reg['wat'].")?
   (".$this->reg['wat'].")?
   (".$this->reg['wat'].")?
   (".$this->reg['wat'].")?
/",$value,$match);

Прямо сейчас каждый пробел считается как разрыв строки, поэтому при поиске он не возвращает никаких находок. но это выглядит чище и легче для чтения, поэтому я прошу вас знать. я искал одно из этих писем, чтобы добавить после закрывающего "/" в регулярном выражении. Спасибо

3 ответа

Да, взгляните на параметр PCRE_EXTENDED:

x (PCRE_EXTENDED)
Если этот модификатор установлен, символы пробельных данных в шаблоне полностью игнорируются, за исключением случаев, когда они экранированы или находятся внутри класса символов, и символы между # неэкранированным # вне класса символов и следующим символом новой строки, включительно, также игнорируются. Это эквивалентно модификатору Perl /x и позволяет включать комментарии в сложные шаблоны. Обратите внимание, однако, что это относится только к символам данных. Пробельные символы могут никогда не появляться в последовательностях специальных символов в шаблоне, например, в последовательности (?(Которая вводит условный подшаблон).
preg_match_all('/('.$this->reg['wat'].'){0,7}/', $value, $match);

Это должно быть довольно чисто.

В случае, если это не было очевидно: (и в качестве расширенной / упрощенной версии ответа VolkerK) добавьте флаг x к вызову preg_match:

preg_match_all(".../x",$value,$match);

Это позволит вам использовать новые строки без регулярных выражений, соответствующих им.

Другие вопросы по тегам