繁体   English   中英

正则表达式匹配产生意外结果

[英]regular expression matching producing unexpected result

这是用于正则表达式匹配的代码

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int matchhere(char *regexp,char *text);
int matchstar(int c,char *regexp,char *text);
int match(char *regexp,char *text)
{

    if(regexp[0]=='^')
        return matchhere(regexp+1,text);

    do {
        if(matchhere(regexp,text))
            return 1;


    } while(*text++!='\0');

    return 0;
}

int matchhere(char *regexp,char *text)
{
    if(regexp[0]='\0')
        return 1;
    if(regexp[1]='*')
        return matchstar(regexp[0],regexp+2,text);

    if(regexp[0]=='$' && regexp[1]=='\0')
        return *text=='\0';
    if(*text!='\0' && regexp[0]=='.' || regexp[0]==*text)
        return matchhere(regexp+1,text+1);
    return 0;
}

int main()
{
    char *regexp="^abb";
    char *text="cabbacd";
    cout<<match(regexp,text)<<endl;

    return 0;
}
int matchstar(int c,char *regexp,char *text)
{
    do {
        if(matchhere(regexp,text))
            return 1;
    }
    while(*text!='\0' && (*text++==c || c=='.'));

    return 0;
}

它写入运行时错误,调试后,我得到以下结果

+       regexp  0x00365839 "abb"    char *
        regexp[0]   97 'a'  char
+       text    0x00365830 "cabbacd"    char *

为什么?请帮助我,为澄清起见,我无法调试更多,因为它给我窗口带来了意外错误

if(regexp[0]='\0')
     return 1;
if(regexp[1]='*')

这些分配不仅在逻辑上是错误的,而且是非法的。 更改字符串文字是非法的。 如果使用const char* ,编译器将为您解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM