Регулярное выражение 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);

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

Ответы

Ответ 1

Да, посмотрите параметр PCRE_EXTENDED:

x (PCRE_EXTENDED)
  Если этот модификатор установлен, символы пробельных данных в шаблоне полностью игнорируются, кроме случаев, когда они экранированы или внутри класса символов, а символы между неэкранированным # вне класса символа и следующим символом новой строки, включительно, являются также игнорируется. Это эквивалентно модификатору Perl/x и позволяет включать комментарии внутри сложных шаблонов. Однако обратите внимание, что это относится только к символам данных. Пробельные символы могут никогда не появляться в специальных символьных последовательностях в шаблоне, например, в последовательности (? (Которая вводит условный подшаблон.

Ответ 2

preg_match_all('/('.$this->reg['wat'].'){0,7}/', $value, $match);

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

Ответ 3

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

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

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