php清理正则表达式

时间:2010-04-25 23:33:04

标签: php regex

嘿,我可以通过这个来清理php中的preg_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);

看起来像这样:

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 个答案:

答案 0 :(得分:6)

是的,请查看PCRE_EXTENDED option

x(PCRE_EXTENDED)
    如果设置了此修饰符,则模式中的空格数据字符将被完全忽略,除非转义或在字符类中,并且字符类外的未转义#和下一个换行符(包括在内)之间的字符为也被忽略了。这相当于Perl的/ x修饰符,并且可以在复杂模式中包含注释。但请注意,这仅适用于数据字符。空格字符可能永远不会出现在模式中的特殊字符序列中,例如在序列中(?(引入条件子模式。

答案 1 :(得分:3)

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

那应该相当干净。

答案 2 :(得分:1)

如果不明显:(并作为VolkerK答案的扩展/简化版本)将x标志添加到preg_match调用中:

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

这将允许您使用新行而不使用正则表达式实际匹配它们。