2011-10-13 281 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])([^/]+)/([^/]+)/$#