2012-03-06 136 views
2

我在學習正則表達式。我正在通過嘗試檢查電子郵件帳戶來測試自己。這個問題雖然是它的未來了一個錯誤:preg_replace正則表達式需要正斜槓打開和關閉?

沒有結束符「^」在/www/eh11522/public_html/scclib/demo/regex.php發現第8行

這裏是我的代碼:

<?php 
$pattern = "^([\w.]+)@w([\w.]+).([\w.]+)"; 
$email = "[email protected]"; 

if (!preg_replace($pattern, '', $subject)) { 
echo "worked"; 
} else { 
echo "failed"; 
} 

?> 

我發現它可以工作,如果我在模式之前和之後放一個斜線,但我不太明白那是幹什麼的,而且這不符合我想要的。

+0

可能重複(http://stackoverflow.com/questions/6270004/converting-ereg-expressions-到半固化片) – mario 2012-03-06 19:02:19

回答

2

的斜槓是分隔符,並且需要改變

$pattern = "^([\w.]+)@w([\w.]+).([\w.]+)"; 

$pattern = "/^([\w.]+)@w([\w.]+).([\w.]+)/"; 

將解決您的問題。您需要爲正則表達式指定一個分隔符。在這種情況下,我使用/,但有很多alternatives you can useInfo here使用具有PHP

2

正則表達式定界符並不一定要在PHP中的斜線,但你確實需要的東西告訴函數,其中正則表達式開始和結束。斜槓('/')和散列符號(#)都是流行的替代方案;我通常更喜歡後者,因爲它可以讓我在解析URL的時候馬虎不得。

$pattern = "#^([\w.]+)@w([\w.]+).([\w.]+)#"; 
1

的斜槓是一個「屏蔽字符」告訴preg_replace()什麼是開始和正則表達式的結束。例如,您可以在RegEx的最後(即在第二個屏蔽字符後面)放置幾個標誌,以使其不區分大小寫。

1

正斜槓是正則表達式分隔符。您也可以使用其他字符作爲分隔符,例如{pattern},#pattern#。他們是那種從其他語言如Perl,你不需要附上你的正則表達式中的引號例如緩繳的:

「蘋果梨桔子」 =〜/梨/

他們還用分離出正則表達式的一部分。對於〔實施例,當你想情況下互動,或者替換一些字符:[轉換額日格則表達式來浸漬料]的/pattern/replace/flags

//This perl code will replace Earth, earth, eArth... with zeus 
"Earth, mars, mercury, pluto" =~ s/earth/zeus/i;