我对preg_match
或类似的不被弃用的函数不满意。
这是两个字符串:
/Cluster-Computers-c-10.html
/Mega-Clusters-c-15_32.html
我想知道:
在第1个示例中,如何获取-c-
和.html
之间的值(示例中的值为10)。该值始终为整数(数字)
在第2个示例中,如何获取-c-
和.html
之间的值(示例中的值为15_32
)。该值始终是由_
基本上我想做的是检查字符串是否有c-10.html
或c-15_32.html
并获取值并将其传递给数据库。
答案 0 :(得分:3)
preg_match('~-c-(.*?)\.html$~', $str, $matches)
var_dump($matches);
答案 1 :(得分:3)
你可以这样做:
preg_match('/-c-(\d+(?:_\d+)?)\.html$/i',$str);
说明:
-c- : A literal -c-
( : Beginning of capturing group
\d+ : one or more digits, that is a number
(?: : Beginning of a non-capturing group
_\d+ : _ followed by a number
) : End of non-capturing group
? : Makes the last group optional
) : End of capturing group
\. : . is a metacharacter to match any char (expect newline) to match
a literal . you need to escape it.
html : a literal html
$ : End anchor. Without it the above pattern will match any part
of the input string not just the end.
答案 2 :(得分:1)
/-c-(\d+(?:_\d+)?)\.html$/i
-c-
寻找-c-
(\d+(?:_\d+)?)
匹配号码或号码 - 下划线号码
\.html
一段时间和尾随html
$
强制它匹配行的结尾
i
不区分大小写的匹配
示例:
<?php
header('Content-Type: text/plain');
$t = Array(
'1) /Cluster-Computers-c-10.html',
'2) /Mega-Clusters-c-15_32.html'
);
foreach ($t as $test){
$_ = null;
if (preg_match('/-c-(\d+(?:_\d+)?)\.html$/i',$test,$_))
var_dump($_);
echo "\r\n";
}
?>
输出:
array(2) {
[0]=>
string(10) "-c-10.html"
[1]=>
string(2) "10"
}
array(2) {
[0]=>
string(13) "-c-15_32.html"
[1]=>
string(5) "15_32"
}
答案 3 :(得分:0)
我看到的最简单的方法是:
preg_match( '/-c-([^.]+)\.html/i', $url, $matches );
var_dump( $matches );