-2
說,給定的字符串是abcwhateverdefwhatever34567whatever012
如何匹配那些按順序排列的組,比如匹配abc, def, 34567,012
?如何匹配序列組?
正則表達式,我現在是(.)\1{2,}
,但它同樣是匹配,但沒有按順序
說,給定的字符串是abcwhateverdefwhatever34567whatever012
如何匹配那些按順序排列的組,比如匹配abc, def, 34567,012
?如何匹配序列組?
正則表達式,我現在是(.)\1{2,}
,但它同樣是匹配,但沒有按順序
如果你還在尋找PHP代碼。
function getSequence($str) {
$prev = 0; $next = 0; $length = strlen($str);
$temp = "";
for($i = 0; $i < $length; $i++) {
$next = ord($str[$i]);
if ($next == $prev + 1) {
$temp .= $str[$i];
} else {
if (strlen($temp) > 1) $result[] = $temp;
$temp = $str[$i];
}
$prev = $next;
}
if (strlen($temp) > 1) $result[] = $temp;
return $result;
}
$str = "abcwhateverdefwhatever34567whatever012";
print_r(getSequence($str));
下面是一個解決方案,用正則表達式解決問題。這不是很有效,但我不會推薦它。
from re import findall, X
text = "abcwhateverdefwhatever34567whatever012"
reg = r"""
(?:
(?:0(?=1))|
(?:(?<=0)1)|(?:1(?=2))|
(?:(?<=1)2)|(?:2(?=3))|
(?:(?<=2)3)|(?:3(?=4))|
(?:(?<=3)4)|(?:4(?=5))|
(?:(?<=4)5)|(?:5(?=6))|
(?:(?<=5)6)|(?:6(?=7))|
(?:(?<=6)7)|(?:7(?=8))|
(?:(?<=7)8)|(?:8(?=9))|
(?:(?<=8)9)|
(?:a(?=b))|
(?:(?<=a)b)|(?:b(?=c))|
(?:(?<=b)c)|(?:c(?=d))|
(?:(?<=c)d)|(?:d(?=e))|
(?:(?<=d)e)|(?:e(?=f))|
(?:(?<=e)f)
){1,}
"""
print findall(reg, text, X)
結果是:
['abc', 'def', '34567', '012']
正如你可以看到我只加了數字和第6個字母在字母表。如何繼續應該是相當明顯的。
你不能用正則表達式來做這件事。根據您使用的語言,您可以通過查看各個「char」的數字表示來做到這一點。 –
我正在使用php .. –
正則表達式不適用於此任務。 – invisal