2011-10-13 285 views
1
regex:^([^\/])/([A-Z])([^\/]+)/([^\/]+)/$ 

字符串匹配:http://127.0.0.1:8008/BeiJing/FangChan/使用PHP的preg_match,警告

我使用的preg_match()來測試

if (preg_match('/^([^\/])/([A-Z])([^\/]+)/([^\/]+)/$/',"http://127.0.0.1:8008/BeiJing/FangChan/",$match)) 
    print $match[0]; 
else 
    print 'not match'; 

卻得到了一個警告:preg_match() [function.preg-match]: Unknown modifier '(' 誰能幫我寫這個表達式所以它的preg_match函數有效嗎?我嘗試了很多不同的想法,但我對真正的正則表達式不太瞭解。

+2

你應該看看['parse_url'](http://php.net/manual/en/function.parse-url.php)函數。正則表達式的一個很好的介紹[可以在這個網站找到](http://www.regular-expressions.info/)。 – hakre

+0

什麼是正則表達式_supposed_匹配?它與網址不匹配。 – Herbert

+0

只要B是大寫,它就匹配'a/Bc/d /',但它不匹配_any_ URL。如果你刪除錨點'^'和'$',它會匹配'8/BeiJing/FangChan /' – Herbert

回答

1

您需要通過在其前面放置\來轉義/。或改變第一和最後一個/別的東西,如:

if (preg_match('|^([^/])/([A-Z])([^/]+)/([^/]+)/$|',"http://127.0.0.1:8008/BeiJing/FangChan/",$match)) print $match[0]; else 

但是,這個正則表達式不匹配的URL。

3

/是什麼在您的示例中指示模式的開始和結束,無論模式是否爲修飾符。

所以這樣的:

/^([^/])/([A-Z])([^/]+)/([^/]+)/$/ 

獲取閱讀,因爲這:

/^([^/])/ 

隨着改性劑([A-Z])([^/]+)/([^/]+)/$/

你要逃避所有/的或改變的起點和終點指標:

#^([^/])/([A-Z])([^/]+)/([^/]+)/$#