PHP preg_match 如何grep下划线之间的字符串
PHP preg_match how to grep string between underscores
我有这个字符串:
mctrn_25595_AdvandSurthree
并想解析它以将数字 25595
提取到一个变量中,基本上 25595_
后面的任何内容都提取到另一个变量中。
$scriptBasename = $_SERVER['SCRIPT_FILENAME'];
$scriptBasename = basename($scriptBasename);
$cuttedName = preg_replace( '/^mctrn_/', '' , $scriptBasename );
$port= preg_match('/[0-9]+/','',$scriptBasename);
$serverName= preg_match('/_"(.*)/','',$cuttedName);
echo($scriptBasename."\r\n");
echo($port."\r\n");
echo($serverName."\r\n");
我的命令行结果:
php mctrn_25595_AdvandSurthree.php <<< script filename!
PHP Notice: Array to string conversion in /home/bent/Downloads/mctrn_25595_AdvandSurthree.php on line 8
Array
0
0
我目前是 PHP 新手,但还没有做到 "such simple stuff"。
如果您知道字符串将始终采用 mctrn_[一些整数]_[文本字符串] 的形式,那么您可以只使用 explode() and list():
$scriptBasename = $_SERVER['SCRIPT_FILENAME'];
$scriptBasename = basename($scriptBasename);
list($mctrn,$port,$serverName) = explode('_',$scriptBasename);
echo($scriptBasename."\r\n");
echo($port."\r\n");
echo($serverName."\r\n");
否则如果你还想使用preg_match(),那么你可以试试这个:
$scriptBasename = $_SERVER['SCRIPT_FILENAME'];
$scriptBasename = basename($scriptBasename);
preg_match('#\_(\d+)+\_(\w+)#',$scriptBasename,$matches);
if (count($matches) > 1) {
$port = $matches[1];
$serverName = $matches[2];
echo($scriptBasename."\r\n");
echo($port."\r\n");
echo($serverName."\r\n");
}
我有这个字符串:
mctrn_25595_AdvandSurthree
并想解析它以将数字 25595
提取到一个变量中,基本上 25595_
后面的任何内容都提取到另一个变量中。
$scriptBasename = $_SERVER['SCRIPT_FILENAME'];
$scriptBasename = basename($scriptBasename);
$cuttedName = preg_replace( '/^mctrn_/', '' , $scriptBasename );
$port= preg_match('/[0-9]+/','',$scriptBasename);
$serverName= preg_match('/_"(.*)/','',$cuttedName);
echo($scriptBasename."\r\n");
echo($port."\r\n");
echo($serverName."\r\n");
我的命令行结果:
php mctrn_25595_AdvandSurthree.php <<< script filename!
PHP Notice: Array to string conversion in /home/bent/Downloads/mctrn_25595_AdvandSurthree.php on line 8
Array
0
0
我目前是 PHP 新手,但还没有做到 "such simple stuff"。
如果您知道字符串将始终采用 mctrn_[一些整数]_[文本字符串] 的形式,那么您可以只使用 explode() and list():
$scriptBasename = $_SERVER['SCRIPT_FILENAME'];
$scriptBasename = basename($scriptBasename);
list($mctrn,$port,$serverName) = explode('_',$scriptBasename);
echo($scriptBasename."\r\n");
echo($port."\r\n");
echo($serverName."\r\n");
否则如果你还想使用preg_match(),那么你可以试试这个:
$scriptBasename = $_SERVER['SCRIPT_FILENAME'];
$scriptBasename = basename($scriptBasename);
preg_match('#\_(\d+)+\_(\w+)#',$scriptBasename,$matches);
if (count($matches) > 1) {
$port = $matches[1];
$serverName = $matches[2];
echo($scriptBasename."\r\n");
echo($port."\r\n");
echo($serverName."\r\n");
}