Привет, ребята, мне нужно удовлетворить определенный клиентский спрос на PCI.Мне довольно комфортно в Си, и я действительно не хочу переделывать колесо здесь.У меня есть пример регулярного выражения в python, который я хотел бы применить в C.
pan_regexs = {'Mastercard': re.compile('(?:\D|^)(5[1-5][0-9]{2}(?:\ |\-|)[0-9]{4}(?:\ |\-|)[0-9]{4}(?:\ |\-|)[0-9]{4})(?:\D|$)'), \
'Visa': re.compile('(?:\D|^)(4[0-9]{3}(?:\ |\-|)[0-9]{4}(?:\ |\-|)[0-9]{4}(?:\ |\-|)[0-9]{4})(?:\D|$)'), \
'AMEX': re.compile('(?:\D|^)((?:34|37)[0-9]{2}(?:\ |\-|)[0-9]{6}(?:\ |\-|)[0-9]{5})(?:\D|$)')}
Я нашел некоторую библиотеку POSIX "regex.h", и в ней, похоже, использовался действительно старый стандарт регулярных выражений.
Я нашел два примера, один из которых использует регулярное выражение POSIX, которое в лучшем случае ограничено.Украдена у Здесь
#include <regex.h>
regex_t regex;
int reti;
char msgbuf[100];
/* Compile regular expression */
reti = regcomp(®ex, "^a[[:alnum:]]", 0);
if (reti) {
fprintf(stderr, "Could not compile regex\n");
exit(1);
}
/* Execute regular expression */
reti = regexec(®ex, "abc", 0, NULL, 0);
if (!reti) {
puts("Match");
}
else if (reti == REG_NOMATCH) {
puts("No match");
}
else {
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
fprintf(stderr, "Regex match failed: %s\n", msgbuf);
exit(1);
}
/* Free memory allocated to the pattern buffer by regcomp() */
regfree(®ex);
Проблема, с которой я столкнулся выше, заключается в том, что она использует (из того, что я собрала) Старый Regex, который не поддерживает удаление пробелов и тире.Похоже, что только на самом деле выполняется какое-то сопоставление и поиск достойных примеров, для меня это не дает много результатов в Google.Поэтому я посмотрел дальше и в этом ответе (вопрос выше) упоминается об использовании PCRE.
Я нашел некоторую демонстрацию Здесь
Как я уже говорил, я нене хочу изобретать велосипед.Я думаю, что было бы ужасно написать свое собственное регулярное выражение для того, что могло бы содержать потенциальные недостатки, когда, возможно, существует что-то чистое и простое.
Вопрос PCI исходит от клиента, который нам нужен, чтобы иметь возможность отслеживать системы для того, как /где они хранят PAN и тому подобное.Это своего рода DLP, сфера аудита и подтверждение того, что CCNS хранятся правильно.
Как я могу использовать регулярные выражения в C для поиска номеров кредитных карт?
PS.Я согласен с этим регулярным выражением и открыт для лучших способов сделать это регулярное выражение.