Regexp в переменную. Perl

Все о программировании под *nix
Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Regexp в переменную. Perl

Сообщение Llama »

Хочется как-то реализовать конструкцию вида:

Код: Выделить всё

$a = "[^,\s]DEFINE\s+";
print if /$a/;
Т.е. надо интерпретировать переменную как регулярное выражение, а не как константу. Это необходимо для лексического анализа одного довольно гадкого языка программирования - т.е. по идее задается набор регэкспов для поиска ключевых слов и их сочетаний с последюще их интерпретацией.
Опыт растет прямо пропорционально выведенному из строя оборудованию

_kirya85

Сообщение _kirya85 »

IMHO для лексического анализа лучше использовать спецеализованные средства - lex( или его более навароченная версия flex). Для Ruby есть его порт, по идее должен быть и для perl'a.

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

Мммм.... К сожалению, некогда изучать, к тому же существующая задача решается прекрасно и на перле в необходимых объемах...
Опыт растет прямо пропорционально выведенному из строя оборудованию

Аватара пользователя
leikind
Неотъемлемая часть форума
Сообщения: 811
Зарегистрирован: 20 июн 2002, 03:02
Откуда: Брюссель
Контактная информация:

Сообщение leikind »

Так а в чем проблема? Это в Перле работает.

Вот

Код: Выделить всё

$a = '[^,\\s]DEFINE\\s+';
if ("_DEFINE " =~ /$a/){
        print "yes\n"
}else{
        print "no\n"
}
Просто скорее всего ты пытаешься найти слово DEFINE, то есть последовательность символов DEFINE, которым предшествует либо пробел, либо запятая, либо начало строки. Но [^\s,] значит любой символ, кроме пробельного и запятой. Нужно ^ убрать с места первого символа в квадратных скобках.

Вот что ты хотел:

Код: Выделить всё

$a = '[,^\\s]DEFINE\\s+';
if (" DEFINE " =~ /$a/){
        print "yes\n"
}else{
        print "no\n"
}
Ну и будь обращай внимание на разницу между 'строка' и "строка"

А лучше взять перловский парсер генератор Демиана Конвея - parse-rec-descent
Изображение

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

leikind писал(а): Ну и будь обращай внимание на разницу между 'строка' и "строка"
Видимо в этом и были грабли
Опыт растет прямо пропорционально выведенному из строя оборудованию

Ответить