如果你有一張紙,一支筆,你被要求寫下一個簡單的算法,這樣做,你會怎麼做呢?
這是我會怎麼做:
您可以確定子域,在字符串中,通過查找第一個點。因此,找到第一個點,然後提取子域。
由於我們只關心我們可以在邏輯上的數字,刪除任何不是數字的東西。
現在我們只有一個數字,它應該很簡單,以評估它是否是我們想要的。
在代碼中,你可以做這樣的事情:
$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