Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] *perl*|*regexp* как сделать регулярку?

Ответить
Настройки темы
Разное - [решено] *perl*|*regexp* как сделать регулярку?
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


У меня почему-то не срабатывает регулярка. Возвращает 1, но переменные $&, $1-$4 не выставляет.
Код: Выделить весь код
 $templ="{asdasdasd}";
 $templ=~m/\{\?|\!=|([\d]+)|([\w\-]+)|(\[[^\]]*\])|(\\[cwrnb])|[^\s\w\d{}]+| +|./gm
Заложенный смысл: нужно вычленить из текста английские слова, числа, текст обрамлённый скобками [..], пробелы, русские слова и односимвольные последовательности.
англ.слова, [..], числа и т.д. сложить в соотв. переменные $1-$4.

На javascript прокатывает, в перле - нет.

Отправлено: 17:15, 21-12-2014

 

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


pva, Я тут недавно подключал RegExp к C++ Builder 2010, всё в принципе работало с простыми регулярками. А потом решили оптимизировать и мне составили регулярку, которую никак не хочет понимать эта версия модуля регэкспов. Подключил билдеровский boost\regexp - всё норм.

Я бы попробовал от простого варианта, по частям реализовать
Цитата pva:
английские слова »
Цитата pva:
числа »
Цитата pva:
текст обрамлённый скобками [..] »
Цитата pva:
пробелы, русские слова и односимвольные последовательности »
если всё сработает, то уже пробовать соединять всё в одну регулярку.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 01:41, 22-12-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Делал вот так:
Код: Выделить весь код
if ($templ=~/\G\d+/gc) {
   ...
}
elsif ($templ=~/\G\w+/gc) {
   ...
}
elsif ($templ=~/\G\!=/gc) {
   ...
}
...
так работает. Но хочу свернуть код покороче, в одно регулярное выражение

Отправлено: 08:44, 22-12-2014 | #3

pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Нашёл! Не чистый эксперимент оказался. Дело в том, что я делал пару лексер-парсер, лексер выглядит так:
Код: Выделить весь код
sub lex() { $templ=~/регулярка/g }
но при этом по возвращению из sub, видимо значения $&, $1-$4 сбрасываются. Помогло так:
Код: Выделить весь код
my($tok,$num,$name,...);
sub lex() { 
  if ($templ=~/регулярка/g) {
    ($tok,$num,$name,..)=($&,$1,$2,...);
    return 1;
  }
}

Отправлено: 09:06, 22-12-2014 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] *perl*|*regexp* как сделать регулярку?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] regexp. не закрытые скобки neprotiv Скриптовые языки администрирования Windows 11 06-11-2012 05:20
Java - RegExp JS Forpost Программирование и базы данных 1 06-02-2011 14:52
Теория - Regexp-ы, определение количества совпадений hasherfrog Программирование и базы данных 2 02-04-2009 12:11
Как подружить Apache и Perl? Savant Вебмастеру 15 17-10-2005 12:40
perl regex не получается сделать :( lcat Программирование и базы данных 2 07-06-2004 06:44




 
Переход