Как стать автором
Обновить

Комментарии 20

Вот пример рекурсивного регулярного выражения, который недопустим: ($E:{E}){E}

Т.е. рекурсия всё-таки не реализована?

Реализована. Но допустимо так: ($OK:X{OK}?){OK} и находит оно: XXXXXXXX. А бесконечное вхождение без смещения каретки поиска недопустимо.

Да.

Не знаю. У меня Win 7. Но по идее любой С++ потянет библиотеку.

По началу я подумал, что мне совершенно незачем в них разбираться и в интернете, наверняка, уже есть полно готовых библиотек. Стал искать, нашёл какие-то осколки кода на С++, которые ничего не дают.

Регулярные выражения есть в std начиная с C++11, уже больше 10 лет тому как.

Открыть в Visual Studio C++ 6

А-а, вон оно чо, Михалыч.

{:Digit} соответствует выражению: (-?[0-9]+.?[0-9]*[Ee]?-?[0-9]*)

При такой регулярке числом будет считаться даже текст "0<E-"

Ну и кроме того Digit - это отдельная цифра. А число это Number.

На машинном уровне это организованно чуточку иначе: https://github.com/monstr518/RegularExpressions/blob/main/RegularExpressions.cpp#L1878

Но минус действительно возможен лишний. Я могу это легко исправить, если хоть кому-то это нужно.

Имеется ввиду, что не экранированная точка считается за любой символ

Код - это ужас какой-то. Как будто библиотека напрямую из времён актуальной MSVS 6 прибыла.

using namespace std;


typedef vector<string>	V_S;

В заголовочном файле? Так не делали даже тогда.

class BaseFinder {
public:
	int type;

Может всё-таки enum, который был ещё в с89?

bool SimvolFinder::isProbelSimvol(const char c){
	if(!c)return 1;
	const char* chars = " \f\n\r\t\v";
	int i;
	for(i=0;chars[i];++i)if(c==chars[i])return 1;
	return 0;
}

isspace?

И ещё, очень похоже, что это всё не будет работать с utf8 вообще никак

Теряюсь в сомнениях, специально ли код был обфусцирован, или автор реально такой "криворукий") Код ужасен. Испанский сдыт.

Грамматики, могущие содержать рекурсию, называются контекстно-свободными. Их теория и способы описания хорошо разработаны. Выражения, подобные регулярным, для них не используют, так как собственно регулярные выражения придуманы для регулярных грамматик, которые по определению не могут содержать рекурсии, и "расширение возможностей" превращает их в жуткий костыль. Для контекстно-свободных грамматик традиционно применяют намного более удобную и легко читаемую форму записи Бэкуса-Наура.

Автор, похоже, независимо изобрёл формализм PEG (parsing expression grammar).
Это способ описания алгоритмов рекурсивного спуска в виде выражений, похожих на регулярные.

НЛО прилетело и опубликовало эту надпись здесь

Это можно строго доказать?

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Вы мне ещё раз такое скажете, и я свой ScriptX опубликую. Это язык который со старта знает только описание конструкции БеконаСаируса (так чё-то). И он дополняет свой синтаксис, прямо в процессе исполнения кода :).

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории