如果你有一张纸,一支笔,你被要求写下一个简单的算法,这样做,你会怎么做呢?
这是我会怎么做:
您可以确定子域,在字符串中,通过查找第一个点。因此,找到第一个点,然后提取子域。
由于我们只关心我们可以在逻辑上的数字,删除任何不是数字的东西。
现在我们只有一个数字,它应该很简单,以评估它是否是我们想要的。
在代码中,你可以做这样的事情:
$samples = [
'sub1.hostname1.com',
'sub12.hostname2.com',
'suboo2.hostname3.com',
'sub2.hostname4.com',
];
foreach ($samples as $domain) {
// Find the sub-domain
$dot = strpos($domain, '.');
if ($dot === false) {
continue;
}
$sub = substr($domain, 0, $dot);
// Remove non-numbers from the sub-domain
$number = filter_var($sub, FILTER_SANITIZE_NUMBER_INT);
// Check that it is what we want
if ($number == 1 or $number == 2) {
echo "$domain is a $number sub-domain<br>";
}
}
我会离开它作为一个练习扔东西到一个函数,如果这是你在找什么。
如果你绝对要使用正则表达式的话,那就只是检查数子域名的问题:
foreach ($samples as $domain) {
$matches = preg_match('/^[^0-9]+(?:1|2)\./', $domain);
if ($matches === 1) {
echo "$domain is a 1 or 2 sub-domain<br>";
}
}
你有试过什么吗?如果是的话,把你的代码 –
不,我没有挣扎。我得到了一个基于sed的正则表达式匹配,但不适用于php。 – basic1point0
对于数组,请尝试'preg_grep'。 – AbraCadaver