我已经在变量$ url中存储了一个URL。 $ url可以是:
/panel
/panel/<pages>
/panel/<XX>
/panel/<XX>/<pages>
其中:
panel is a fixed string
<pages> is an aribtary string
<XX> is a number (1 to infinite digits)
如何使用php中的正则表达式来爆炸并获取$ number(如果存在)和$ page(如果存在)?
答案 0 :(得分:1)
^/panel(/[a-zA-Z]+)?(/\d+)?$
匹配
/panel
/panel/23
/panel/apple
/panel/apple/1234
不匹配:
/panel/
/panel/23/apple
/panel/apple/123/12
/panel/apple/pear
如果匹配,此正则表达式只返回true
,否则返回false
。有很多关于如何在PHP中使用正则表达式的教程,以及如何从中获取所需的部分。在这种情况下,$1
将保留页面名称,$2
将保留页码。
答案 1 :(得分:1)
您可以使用:^/panel(?:/(\d*)/?(\w*)/?)?$
$strs = array(
'/panel'
,'/panel/pages'
,'/panel/69'
,'/panel/69/pages'
);
foreach($strs as $str)
{
preg_match('#^/panel(?:/(\d*)/?(\w*)/?)?$#',$str,$matches);
list($orig,$number,$pages) = array_pad($matches,3,false);
echo "<pre>";
print_r(compact('orig','number','pages'));
echo "</pre>";
}
/* OUTPUT:
Array
(
[orig] => /panel
[number] =>
[pages] =>
)
Array
(
[orig] => /panel/pages
[number] =>
[pages] => pages
)
Array
(
[orig] => /panel/69
[number] => 69
[pages] =>
)
Array
(
[orig] => /panel/69/pages
[number] => 69
[pages] => pages
)
*/
答案 2 :(得分:0)
我觉得这样的事情可以奏效:
$url = "/panel/33/asdasd-asdasd"; preg_match('/\/panel\/?([^\/]*)\/?([^\/]*)/i', $url, $matches); print_r($matches);
基本上是表达式?或者*只有在它们存在时才匹配
答案 3 :(得分:0)
问题中出现的是,您只需要在网址中找到第二个细分,以防该细分是一个数字。
所以你可以这样做:
找出第二段 - &gt;检查它是否为数字 - &gt;如果你的测试是肯定的(即它是一个数字) - &gt;你已经获得了你想要的东西。
答案 4 :(得分:0)
regexp的新手,但试试这个:
$urls = array();
$urls[] = "/panel";
$urls[] = "/panel/something";
$urls[] = "/panel/12";
$urls[] = "/panel/42/something else";
foreach($urls as $url)
{
echo "evaluating: '$url'";
preg_match("|/panel(?:/)?([0-9]*)?(?:/)?(.*)?|",$url,$matches);
echo "<pre>";
var_dump($matches);
echo "</pre>";
}
答案 5 :(得分:0)
function parsePath($url) {
$number = NAN;
$page = '';
$found_number = false;
$found_page = false;
$parsed = parse_url($url);
$pathArr = [];
if (isset($parsed['path']))
$pathArr = explode('/', $parsed['path']);
foreach ($pathArr as $path) {
if (is_numeric($path) && !$found_number) {
$number = $path;
$found_number = true;
continue;
}
if (!empty($path) && preg_match('/[^(panel)]/', $path) && !$found_page) {
$page = $path;
$found_page = true;
continue;
}
}
echo "Parsed Url = { Number: $number, Page: '$page' }\n";
}
parsePath('http://www.google.com/panel/123/page1');
parsePath('http://www.google.com/panel/page1/123');
parsePath('http://www.google.com/panel/123');
parsePath('http://www.google.com/panel/page1');
parsePath('http://www.google.com');
结果:
Parsed Url = { Number: 123, Page: 'page1' }
Parsed Url = { Number: 123, Page: 'page1' }
Parsed Url = { Number: 123, Page: '' }
Parsed Url = { Number: NAN, Page: 'page1' }
Parsed Url = { Number: NAN, Page: '' }