Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何匹配序列组?_Regex - Fatal编程技术网

Regex 如何匹配序列组?

Regex 如何匹配序列组?,regex,Regex,例如,给定的字符串是abcwhateverdefwhatever34567whatever012如何匹配按顺序排列的组,如matchabc,def,34567012 我现在拥有的正则表达式是()\1{2,},但是如果您仍然在寻找PHP代码,它匹配相同的字符,但不按顺序匹配 function getSequence($str) { $prev = 0; $next = 0; $length = strlen($str); $temp = ""; for($i = 0; $

例如,给定的字符串是abcwhateverdefwhatever34567whatever012如何匹配按顺序排列的组,如match
abc,def,34567012


我现在拥有的正则表达式是
()\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));
函数getSequence($str){ $prev=0;$next=0;$length=strlen($str); $temp=“”; 对于($i=0;$i<$length;$i++){ $next=ord($str[$i]); 如果($next==$prev+1){ $temp.=$str[$i]; }否则{ 如果(strlen($temp)>1)$result[]=$temp; $temp=$str[$i]; } $prev=$next; } 如果(strlen($temp)>1)$result[]=$temp; 返回$result; } $str=“abcwhateverdefwhatever34567 whatever012”; 打印(获取序列($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)

如你所见,我只添加了数字和字母表中的前6个字母。如何继续下去应该是显而易见的。

正则表达式不能这样做。根据您使用的语言,您可以通过查看单个
char
s的数字表示来执行此操作。正则表达式不适用于此任务。@NokImchen:使用
ord
并沿字符串进行迭代,将每个
ord
与前一个字符的
ord
@nneonneo进行比较,字符串非常大,大约10MB,因此为了简单起见,我想使用正则表达式。无论如何,谢谢:)更好的问题是,为什么你必须用10MB的字符串…在PHP中。。。
['abc', 'def', '34567', '012']