C regexec返回误报

时间:2018-11-10 02:12:57

标签: c regex

我正在实施“银行”软件,创建新用户时必须输入可接受的用户名,密码和余额。

    $temp = "room0%";
    $db = $this->Apple->getDataSource();
    $some = $db->fetchAll(
        "SELECT * 
          FROM  apple 
          JOIN box on apple.box_id = box.id
          JOIN room on box.room_id = room.id
          WHERE room.name LIKE '$temp'"
    );

将是正确输入的示例

BANK: create-user bob 1234 11111

是不正确的,基本上是一个单词的用户名,一个4位数字的密码和一些整数。

regexec对于两个用户名输入都返回0,即使绝对不应该。

代码当前为

BANK: create-user bob0101 1234 11111

其中cmd [1]是用户名

我在C正则表达式方面没有很多经验,但是我知道这不应该使用数字,任何帮助将非常感谢!

2 个答案:

答案 0 :(得分:0)

如果要匹配仅包含字母的字符,则必须使用以下内容:

int reti_s = regcomp(&regex_s,“ [a-z] +”,REG_EXTENDED | REG_ICASE);

我根据https://linux.die.net/man/3/regcomp添加了REG_ICASE标志。

答案 1 :(得分:0)

如果正则表达式简单匹配,

regexec仅返回0。如果要提取信息,则需要使用regmatch_t数组来存储子表达式的匹配项。或者,如果您只对全局匹配感兴趣,则可以使用仅包含一个regmatch_t元素的数组(以获取有关匹配的信息)。

如手册页所述:

  

pmatch数组的第0个成员被填充,以指示整个RE匹配字符串的哪个子字符串。

,您必须使用rm_so的{​​{1}}和rm_eo字段来获取字符串匹配部分的初始位置和结束位置。