Pull to refresh

Comments 20

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

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

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

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

Дата релиза - 1998 год. Можно узнать из любопытства, она нормально устанавливается на Win 10?

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

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

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

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

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

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

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

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

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

Код - это ужас какой-то. Как будто библиотека напрямую из времён актуальной 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).
Это способ описания алгоритмов рекурсивного спуска в виде выражений, похожих на регулярные.

UFO landed and left these words here
UFO landed and left these words here
UFO landed and left these words here

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

Sign up to leave a comment.

Articles