2011-12-23 166 views
1

我使用以下正則表達式來匹配有效的域名: /^([a-z0-9]([a-z0-9]*-*[a-z0-9])*\.)+[a-z][a-z]+$/
這工作正常。但是,當我用域名替換部分域名以匹配域名本身及其子域時,它不起作用。例如,如果我用 /^([a-z0-9]([a-z0-9]*-*[a-z0-9])*\.)*mycarbrokedown.be$/
匹配ns1.mycarbrokedown.be,的preg_match返回0這是一個PHP preg_match錯誤還是我做錯了什麼?

我用一對夫婦的在線測試儀,其確認我的正則表達式匹配不我的字符串。奇怪的是,當我使用preg選項時,regextester.com不會返回任何內容。

所有這些讓我認爲這是PHP中的一個錯誤。由於我不知道是什麼導致了這個錯誤,我一直無法找到匹配的錯誤報告。

這是怎麼回事?

+0

下面是一些預定義的正則表達式模式的鏈接,其中包括一個網址http://regexlib.com/Search.aspx?k=URL&AspxAutoDetectCookieSupport=1 – CBusBus 2011-12-23 10:18:57

回答

0

請嘗試這個正則表達式,讓我知道結果。這可能是因爲你在空白字符串的前面或末尾有空白字符,這就是它不匹配的原因,所以我刪除了^和&。這也是來自RegexBuddy Library的一個正則表達式。

preg_match_all('/([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}/i', $subject, $result, PREG_PATTERN_ORDER); 
+0

隨着$主題是ns1.mycarbrokedown.be,$比賽了1和$ result的值有Array作爲它的值。 我懷疑空白是問題,因爲在測試之前輸入被修剪掉了。 – BenoitRen 2011-12-23 10:54:19

+0

$ matches的值爲1表示它匹配了一次模式,所以它是$ subject中的一個有效域,如果您需要個別部分,那麼知道它是一個有效的域,您可以執行'explode('。', $ subject)'並提取你需要的部分,如果你需要它匹配一個特定的域名,所以你不必做另一個驗證,那麼只需像這樣添加域'^([a-z0-9] +( ?: - [a-z0-9] +)* \。)+ mycarbrokedown \ .net $'如果它符合有效性,那麼只需將其分解並獲取子域 – mangefort 2011-12-23 15:05:10

相關問題