正規表現はどのように書くのですか?正規表現の部分IP
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <regex.h>
int main() {
regex_t regex;
int reti;
char msgbuf[100];
const char *regIp = "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){1,3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?){0,1}$";
reti = regcomp(®ex, regIp, 0);
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
printf("Regex compile: %s.", msgbuf);
reti = regexec(®ex, "192.168.100", 0, NULL, 0);
if (!reti){
puts("MUTCH!!");
} else if (reti == REG_NOMATCH) {
puts("No mutch");
} else {
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
printf("Regex match failed: %s.", msgbuf);
}
}
は私はありませんmutchを持っています。
私は
^\\(?:\\(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\\)\\.\\)\\{1,3\\}\\(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\\)\\{0,1\\}$
ではなく、再び一致するよう、マスクの中括弧を試してみてください。
ありがとうございます。
'regcomp'メソッドに' REG_EXTENDED'を渡し、ドットを2つのバックスラッシュでエスケープする必要があります。 –
REG_EXTENDEDの代わりに
1
を入れてセグメンテーションフォールト – Irbishttps://ideone.com/cuQNbSを参照してください。 POSIX正規表現は非キャプチャグループをサポートしていないので、キャプチャしていないグループを*キャプチャしたグループに置き換える必要があります。 –