Статьи Галерея Форум Чат Файлы HowTo Ссылки Поиск
Текущее время: 28 мар 2020, 11:09




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Regexp в переменную. Perl
СообщениеДобавлено: 08 ноя 2003, 18:32 
Неотъемлемая часть форума
Аватара пользователя

У нас с: 06.02.2002
Сообщения: 9760
Откуда: Менск
Хочется как-то реализовать конструкцию вида:

Код:
$a = "[^,\s]DEFINE\s+";
print if /$a/;


Т.е. надо интерпретировать переменную как регулярное выражение, а не как константу. Это необходимо для лексического анализа одного довольно гадкого языка программирования - т.е. по идее задается набор регэкспов для поиска ключевых слов и их сочетаний с последюще их интерпретацией.

_________________
Опыт растет прямо пропорционально выведенному из строя оборудованию


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 09 ноя 2003, 12:45 
IMHO для лексического анализа лучше использовать спецеализованные средства - lex( или его более навароченная версия flex). Для Ruby есть его порт, по идее должен быть и для perl'a.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 09 ноя 2003, 12:51 
Неотъемлемая часть форума
Аватара пользователя

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

_________________
Опыт растет прямо пропорционально выведенному из строя оборудованию


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 09 ноя 2003, 22:01 
Неотъемлемая часть форума
Аватара пользователя

У нас с: 20.06.2002
Сообщения: 827
Откуда: Брюссель
Так а в чем проблема? Это в Перле работает.

Вот
Код:
$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

_________________
Изображение


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 10 ноя 2003, 10:52 
Неотъемлемая часть форума
Аватара пользователя

У нас с: 06.02.2002
Сообщения: 9760
Откуда: Менск
leikind писал(а):
Ну и будь обращай внимание на разницу между 'строка' и "строка"



Видимо в этом и были грабли

_________________
Опыт растет прямо пропорционально выведенному из строя оборудованию


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
[ All resources are available under GNU GPL ] [ Support ] [ Hosted by DataHata | MyCloud.by ] [ Powered by phpBB® Forum Software © phpBB Group ]

LVEE Winter LVEE Rambler's Top100