2010-04-25 44 views
-1

嘿,我可以清理一個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); 

現在每空間,它算作一個靈打破這樣它不會在搜索時返回任何發現。但它看起來更乾淨,更容易閱讀,爲什麼我問你知道。我正在尋找在正則表達式中關閉「/」後添加的那些字母之一。感謝

+0

提供了一個真實的例子 – 2010-04-26 05:41:30

回答

5

是的,看看在PCRE_EXTENDED option

X(PCRE_EXTENDED)
如果設定了此修正,在模式 空白字符都完全忽略逃跑時除外或字符類中,並且在字符類外的未轉義的#和下一個換行符之間的字符也被忽略。這相當於Perl的/ x修飾符,並且可以在複雜模式中包含註釋。但請注意,這僅適用於數據字符。空白字符可能的特殊字符序列內的圖案在序列內永遠不會出現,例如,(?(其引入了條件子模式。
+0

嗯,這是在一個類內部,所以它爲什麼不工作?我加入它並沒有找到任何結果。 – David 2010-04-25 23:59:39

+0

類與PCRE_EXTENDED的工作方式無關。 – VolkerK 2010-04-26 10:29:48

+0

此答案已添加到[Stack Overflow Regular Expression FAQ](http://stackoverflow.com/a/22944075/2736496),在「修改器」下。 – aliteralmind 2014-04-10 00:52:56

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

這應該是相當乾淨的。

+0

我剛剛輸入了這個,不是那麼簡單 – David 2010-04-26 01:18:56

+0

然後你需要正確定義它有多簡單,因爲我不會給你一個不必要的複雜答案。 – erisco 2010-04-26 01:51:11

1

在情況下,它不是顯而易見的:(和VolkerK的答案的擴展/簡體版)添加x標誌到的preg_match電話:

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

這將允許您使用不換行正則表達式匹配實際上他們

+0

舉個例子絕對有幫助,謝謝。 – Wildcard 2016-03-18 20:45:38