[英]PHP Regex: find all consecutive number sequences in a string?
不確定正則表達式是否是正確的方法,但是這是我要實現的目標...在由諸如234 121 6789 4125 123之類的排序數字組成的字符串中,我想提取至少3個連續的所有序列位數:
可以用正則表達式完成嗎? 否則,什么是明智的方法?
使用RegEx,您可以使用:
(123(?:4(?:5(?:6(?:7(?:89?)?)?)?)?)?|234(?:5(?:6(?:7(?:89?)?)?)?)?|345(?:6(?:7(?:89?)?)?)?|456(?:7(?:89?)?)?|567(?:89?)?|6789?|789)
在這里嘗試: https : //regex101.com/r/Ap8C2D/1
如果您也使用012…測試:
(012(?:3(?:4(?:5(?:6(?:7(?:89?)?)?)?)?)?)?|123(?:4(?:5(?:6(?:7(?:89?)?)?)?)?)?|234(?:5(?:6(?:7(?:89?)?)?)?)?|345(?:6(?:7(?:89?)?)?)?|456(?:7(?:89?)?)?|567(?:89?)?|6789?|789)
您可以使用RegEx,但是老實說,這將更容易實現循環並檢查數字在循環內部是否連續。 看一下這個例子:
$literal = '23412167894125123';
for ($c = 0; $c < strlen($literal) - 2; $c++) {
if(intval($literal[$c]) + 1 == intval($literal[$c + 1]) &&
intval($literal[$c]) + 2 == intval($literal[$c + 2])) {
echo $literal[$c], $literal[$c + 1], $literal[$c + 2], '<br />';
}
}
小提琴: 現場演示
如果正則表達式看起來太復雜,則此函數使用簡單的for循環
function findSeq($string) {
$seq_started = false;
$seq = '';
$list = [];
for ($i = 1; $i < strlen($string) + 1; $i++) {
@$curr = $string[$i];
$prev = $string[$i - 1];
@$next = $string[$i + 1];
if ($prev + 1 == $curr) {
if ($seq_started === false) {
$seq .= "$prev$curr";
} else {
$seq .= $curr;
}
$seq_started = true;
continue;
}
if ($seq_started === true) {
if (strlen($seq) > 2) {
$list[] = $seq;
}
$seq = '';
$seq_started = false;
}
}
return $list;
}
print_r(findSeq('2341216789412501231456789'));
輸出量
Array
(
[0] => 234
[1] => 6789
[2] => 0123
[3] => 456789
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.