我对正则表达式更深入。作为练习,我想查看一个URL是否有效,因此我决定使用preg_match
或preg_match_all
函数在CLI模式下实现作用域。我遇到了一个问题。它将始终返回0,我认为该模式有问题。我该如何解决?我想在自己的路由系统中实现此功能,这是我正在准备的考试的一部分。
<?php
#!/usr/bin/php -q
if( !defined('STDIN') ){
define('STDIN', fopen('php://stdin','rb'));
}
echo "Url to match: \n";
$url = fread(STDIN, 100);
$matching = preg_match_all( '(^\/([a-z]+)\/(\d+)$)' , $url, $matches );
var_dump($matching);
var_dump($matches);
echo "Done! \n";
exit;
?>
更新:
我尝试使用trim函数没有成功,因此我更改了要在匹配中使用的模式,现在得到以下输出:
$pattern = '|/([a-z]+)/([\d]+)$|';
CLI OUTPUT
Url to match:
https://mysitedomain.com/controller/method/1234
int(1)
array(3) {
[0]=>
string(12) "/method/1234"
[1]=>
string(6) "method"
[2]=>
string(4) "1234"
}
Done!
URL的控制器部分将不匹配,我也需要它。
这很奇怪,因为如果我将charatcher ^
添加到字符串的开头,则preg_match
将无法与以下输出配合使用:
$pattern = '(^\/([a-z]+)\/(\d+)$)';
CLI OUTPUT
Url to match:
https://mysitedomain.com/controller/method/1234
int(0)
array(0) {
}
Done!