|
|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Artem Chuprina 2:5020/371.32 24 Nov 2000 13:25:20 To : ace@lglobus.ru Subject : Re: Помогите с REGEXP'ом... -------------------------------------------------------------------------------- alr> From: "Eugene V. Sofronov" <ace@lglobus.ru> alr> Приветы! alr> %SUBJ%, пожалуйста! REGEXP нужен для следующей цели - есть файл формата: alr> === BEGIN === alr> TITLE#1: alr> ORIGINAL#1 - NAME#1 (SHORTNAME#1) /DESCRIPTION#1/ alr> .... alr> TITLE#2: alr> ORIGINAL#2 - NAME#2 (SHORTNAME#2) /DESCRIPTION#2/ alr> .... alr> === END === alr> Для ясности - это список вещей, разделенных на классы (Swords, Daggers, alr> etc.) Каждая запись - отдельная строка в файле, т.е. с \r\n в конце. В alr> поле 'TITLE' находится название класса, 'ORIGINAL' - оригинальное alr> название, 'NAME' - английское название, 'SHORTNAME' - сокращенное alr> английское название, 'DESCRIPTION' - описание или параметры. Все скобки и alr> разделители соблюдаются как в примере. Hадо все это хозяйство разложить alr> на переменные. alr> Я ищу поле 'TITLE' так: alr> === BEGIN === alr> next if ($_ eq ''); alr> $str_len = length($_); alr> $last = substr($_, $str_len-1, $str_len-2); alr> $title = substr($_, 0, $str_len-1); alr> === END === alr> Если ($last eq ':'), то у нас 'TITLE' = $title. Первая строка отсекает alr> пустые записи в файле. Хотелось бы покрасивше, только в голову не лезет alr> ничего. А вот с остальным проблема: поле 'ORIGINAL' может не подчиняться alr> правилу \w+, ибо может являться любым другим языком, отличным от alr> английского и русского. А поле 'SHORTNAME' может вообще отсутствовать, в alr> этом случае надо присвоить ему значение 'NAME', записанное в верхнем alr> регистре. Я попробовал решить в лоб: alr> /^(.*)\s-\s(.*)\s\((.*)\)\s\/(.*)\//; alr> $name = $1; $eng_name = $2; $eng_short = $3; $attr = $4; alr> но скрипт стал загружаться бесконечно. Дальнейшие попытки расчленить этот alr> REGEXP привели к неутешительным результатам. Как правильно записать alr> REGEXP? Уж если писать _в лоб_, то ^(\S+)\s-\s([^(]+)\s\(([^)]+)?\)\s\/([^/]+)\/ Hет? -- Счастливо! Ран. --- ifmail v.2.14.os-p7-tma3 * Origin: MemoNet (2:5020/371.32@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/17121336cdb53.html, оценка из 5, голосов 10
|