2011-11-04 51 views
1

我有以下從舊腳本ereg表達式preg_match。但正則表達式並不是我最強烈的一點,所以我不確定在哪裏改變什麼。如何將以下POSIX正則表達式轉換爲Perl兼容正則表達式庫?PHP:from ereg to preg_match

if (!preg_match("^[^@]{1,64}@[^@]{1,255}$", $email)) 

if (!preg_match("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&?'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i])) 

if (!preg_match("^\[?[0-9\.]+\]?$", $email_array[1])) 

if (!preg_match("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|?([A-Za-z0-9]+))$", $domain_array[$i])) 

在此先感謝。

乾杯,H

回答

3

您需要附上正則表達式一對分隔符爲:

preg_match('/regex/', $srtring) 
      ^ ^

注意,如果正則表達式本身在它的分隔符,那麼你將不得不逃避它通過前面的\

所以,你的第二個例子是這樣的:

if (!preg_match("/^(([A-Za-z0-9!#$%&'*+\/=?^_`{|}~-][A-Za-z0-9!#$%&?'*+\/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\/"))$", $local_array[$i])) 
       ^     ^       ^

或者你可以選擇一個分隔符是不存在的正則表達式。

+0

感謝您的快速回復,但仍問題與第二表達: '未知的修飾「=」' [編輯]納米,固定它! –

+0

你在那個正則表達式中有'+/=?',如果你用'/'作爲分隔符,那麼之後的所有東西都被解釋爲修飾符。通過在它之前添加反斜槓(\\)來逃避該字符。 – thwd

+0

對preg_matches的最後一個,我得到這個錯誤'警告:preg_match()[function.preg-match]:編譯失敗:沒有重複在偏移45' ...任何線索是什麼導致這一點。 –