在以下网址
中http://www.example.com/usa-florida-1234
我可以在网址中将3个部分拆分为美国,佛罗里达和1234 ??
我只需要像
的查询字符串方法那样执行此操作示例内容赞
我的内容在USA
城市florida
发布,邮政编码为1234
如何在-
破折号
喜欢
<?php
$country = // What to keep here?
$city = // What to keep here?
$code = // What to keep here?
?>
我的内容在<?php echo $country; ?>
城市<?php echo $city; ?>
发布,邮政编码为<?php echo $code; ?>
由于
答案 0 :(得分:4)
list($country, $city, $code) =
explode('-', ltrim(parse_url($url, PHP_URL_PATH), '/'));
这里不需要正则表达式。
如果路径包含更多部分,country
最终将会出现一些不需要的路径部分。
$country = end(explode('/', $country));
答案 1 :(得分:1)
您可以使用:
$arr = parse_url("http://localhost/test/usa-florida-1234");
print_r(explode('-', preg_replace('#^.*?/([^/]+)$#', '$1', $arr['path'])));
Array
(
[0] => usa
[1] => florida
[2] => 1234
)
答案 2 :(得分:1)
<?php
preg_match('|http://www.example.com/(.*)-(.*)-(.*)|', 'http://www.example.com/usa-florida-1234', $matches);
print_r($matches);
$country = $matches[1];
$city = $matches[2];
$code = $matches[3];
<强>更新强>
正则表达式中的每个字符要么被理解为具有特殊含义的元字符,要么被理解为具有字面含义的常规字符。
该模式由一系列原子组成。最简单的原子是文字,但是匹配原子的模式的分组部分将需要使用using()作为元字符。
当您匹配括号内的模式时,您可以使用$ 1,$ 2,...或\ 1 \ 2中的任何一个...(取决于匹配器!)以后引用先前匹配的模式。
在上面的示例中:
|
(管道) - 在上面的例子中定义了模式的开始和结束
()
- 两个元字符(
和)
模式的分组部分
.
(点)=元字符;匹配任何单个字符
*
(星号)=元字符,量词;定义允许发生前一个元素(字符或组,子表达式)的频率
考虑到这一点:
(.*)
解析为匹配以供稍后参考由任何出现零次或多次的字符组成的组
并且:
|http://www.example.com/(.*)-(.*)-(.*)|
等于匹配:
包含字符串http://www.example.com/
的字符串文本中出现的任何字符后跟任意字符在-
字符之前的零次或多次,而不是在{{1之前的任何字符零次或多次之后}字符后跟任意字符零次或多次。
答案 3 :(得分:0)
如果以该格式预期使用所有URL,则可以在那里使用explode()。
$url = "http://www.example.com/usa-florida-1234";
$parts = explode('-', $url);
$country = $parts[0];
$city = $parts[1];
$code = $parts[2];
答案 4 :(得分:0)
您首先需要从您的网址('usa-florida-1234')获取路径。 然后你需要用破折号字符分割它。
对于第一部分,您可以使用parse_url。 你会发现它返回一个以'/'开头的字符串。你需要修剪它。 接下来,您可以使用explode。
$urlParts = parse_url('http://www.testdomain.com/usa-florida-1234');
$urlPath = ltrim($urlParts['path'], '/');
$addressParts = explode('-', $urlPath);
$country = $addressParts[0];
$city = $addressParts[1];
$code = $addressParts[2];
您还应检查数组中是否有三个split
返回的字符串。一些错误检查总是很好。
更好的解决方案是使用定义路径的MVC库
'addressRoute' => '/{country}-{state}-{id}'
和他们的处理程序
function addressRoute($country, $state, $id) {
}
答案 5 :(得分:0)
pathinfo
并从数组中获取基本名称
<?php
$var="http://www.testdomain.com/usa-florida-1234";
$arr=pathinfo($var);
echo $arr['basename'];
$arr=explode("-",$arr['basename']);
print_r($arr);
输出:
Array
(
[0] => usa
[1] => florida
[2] => 1234
)