Страница 1 из 1
Regexp в переменную. Perl
Добавлено: 08 ноя 2003, 18:32
Llama
Хочется как-то реализовать конструкцию вида:
Т.е. надо интерпретировать переменную как регулярное выражение, а не как константу. Это необходимо для лексического анализа одного довольно гадкого языка программирования - т.е. по идее задается набор регэкспов для поиска ключевых слов и их сочетаний с последюще их интерпретацией.
Добавлено: 09 ноя 2003, 12:45
_kirya85
IMHO для лексического анализа лучше использовать спецеализованные средства - lex( или его более навароченная версия flex). Для Ruby есть его порт, по идее должен быть и для perl'a.
Добавлено: 09 ноя 2003, 12:51
Llama
Мммм.... К сожалению, некогда изучать, к тому же существующая задача решается прекрасно и на перле в необходимых объемах...
Добавлено: 09 ноя 2003, 22:01
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
Добавлено: 10 ноя 2003, 10:52
Llama
leikind писал(а):
Ну и будь обращай внимание на разницу между 'строка' и "строка"
Видимо в этом и были грабли