LINUX.ORG.RU

Скомпилируй один obj на c++, там уже давно встроенная реализация regex

sparks ★★★★
()
Последнее исправление: sparks (всего исправлений: 1)
Ответ на: комментарий от Deleted

Работа не с реальной файловой системой.

Есть список рег. выражений и путь к файлу (может и не существовать).

Нужно найти рег. выражение, которое подходит к этому пути.

(это будет работать в драйвере файрволла, пока на винде.)

tnodir
() автор топика
Последнее исправление: tnodir (всего исправлений: 1)

Вот вам и с [...]

static int umatch(const char  *, const char  *);

static int amatch(const char *s, const char *p)
{
	int cc, scc, k;
	int c, lc;

	scc = *s;
	lc = 077777;
	switch (c = *p) {

	case '[':
		k = 0;
		while ((cc = *++p)!='\0') {
			switch (cc) {

			case ']':
				if (k)
					return amatch(++s, ++p);
				else
					return 0;

			case '-':
				k |= (lc <= scc) &
					(scc <= (cc=(unsigned char)(p[1])));
			}
			if (scc==(lc=cc)) k++;
		}
		return 0;

	case '?':
	caseq:
		if(scc) return amatch(++s, ++p);
		return 0;
	case '*':
		return umatch(s, ++p);
	case 0:
		return !scc;
	}
	if (c==scc) goto caseq;
	return 0;
}

static int umatch(const char *s, const char *p)
{
	if (*p == 0) return 1;
	while(*s)
		if (amatch(s++, p)) return 1;
	return 0;
}

int gmatch(const char *s, const char *p)
{
	if (*s=='.' && *p!='.') return 0;
	return amatch(s, p);
}

vodz ★★★★★
()
Ответ на: комментарий от tnodir

Есть список рег. выражений и путь к файлу

  1. Если у тебя много регулярок (больше десятка) и сделать нужно не через Ж, то следует объединять их в один FSM и матчить с умом. Соответственно https://www.hyperscan.io/.

это будет работать в драйвере файрволла, пока на винде

  1. Засовывать регэкспы в драйвер будет достаточно странным решением. По-нормальному (т.е не через Ж, как часто под виндой) драйвер должен работать с классификатором, который поддерживается сервисом. Т.е. сервис «по регекспам» классифицирует exe/файл и через IOCTL заносит данные в табличку в драйвере, а драйвер «тупо, но быстро» просто выясняет по табличке можно/нельзя.
Deleted
()

Возьми из crtlib из xash3d

mittorn ★★★★★
()

некоторые рецепты заставили прослезиться )

регулярных выражений на C только для использования * и ?

регулярки-то тут зачем?

olelookoe ★★★
()
Ответ на: комментарий от Deleted

Засовывать регэкспы в драйвер будет достаточно странным решением.

Ожидается, что регэкспов не будет больше 16.

tnodir
() автор топика
Ответ на: комментарий от Deleted

Спасибо за ссылку на Hyperscan. Очень интересно.

tnodir
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.