请教一个正则表达式循环匹配的问题。

bios8086 2016-08-10 04:25:27

假设我有一个数组。
我想写一个正则表达式来匹配六个连续的值
例如: 先是匹配 a[0] 到 a[5], 然后再是匹配 a[1] 到 a[6] 再然后是a[2]到a[7] 等等等.......

我请请我正则表达式有没有这种功能,我并不想旋转数组。
...全文
1020 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2016-08-12
  • 打赏
  • 举报
回复
你只需要适当加长你的数组,例如两倍-1 就可以匹配了 其他都不要做 形式如下 假设原有数据 a[5]={‘a','b',...}; 匹配的时候,改成 a[10]={'a','b',......'a','b',...}; 然后就可以照猫画狗做匹配了。
kongl123 2016-08-12
  • 打赏
  • 举报
回复
正则式等价于确定型自动机,现在定义的自动机都是可回溯自动机,不能回溯状态序列(或图灵说的纸带)。所以说你想的是做不到的。要用一个状态机做多次匹配才可以,也就是回溯了状态序列,也就是你的数组。
赵4老师 2016-08-11
  • 打赏
  • 举报
回复
提醒:正则表达式不是万能的;而有限状态自动机是万能的。 参考《编译原理》中的词法分析和有限状态自动机。
//有字符串
//1_22_333,,4444__55555,_666666
//需要解析为
//1
//22
//333
//_
//4444
//55555
//666666
#include <stdio.h>
char s[]="1_22_333,,4444__55555,_666666";
char c,*p,*p1;
int st;
void main() {
    st=0;
    p=s;
    while (1) {
        c=*p;
        if (0==c) {
            switch (st) {
            case 1:printf("_\n");    break;
            case 2:printf("%s\n",p1);break;
            }
            break;//
        }
        switch (st) {
        case 0:
                 if ('_'==c) {                            st=0;}
            else if (','==c) {                            st=1;}
            else             {p1=p;                       st=2;}
        break;
        case 1:
                 if ('_'==c) {                            st=1;}
            else if (','==c) {printf("_\n");              st=1;}
            else             {p1=p;                       st=2;}
        break;
        case 2:
                 if ('_'==c) {*p=0;printf("%s\n",p1);*p=c;st=0;}
            else if (','==c) {*p=0;printf("%s\n",p1);*p=c;st=1;}
            else             {                            st=2;}
        break;
        }
        p++;
    }
}
//1
//22
//333
//_
//4444
//55555
//666666

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧