Preg_match和preg_match_all始终返回0

时间:2019-07-05 17:12:00

标签: php command-line-interface preg-match preg-match-all

我对正则表达式更深入。作为练习,我想查看一个URL是否有效,因此我决定使用preg_matchpreg_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!

0 个答案:

没有答案
相关问题