|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Sergey Ermakov 2:5020/3123 31 Aug 2002 20:46:16 To : All Subject : Работа с регэкспами --------------------------------------------------------------------------------
Есть пара вопросов по сабжам..
1. Допустим, имеется набор строк, имеющий следующие элементы:
текст, текст, текст : (текст1|текст2|текст3)..
текст, текст, текст : (текст1|текст2|текст3)..
текст, текст, текст. - (неизвестный текст)..
текст, текст, текст. - (неизвестный текст)..
текст, текст, текст. - (неизвестный текст)..
Моя задача Д вычленить текст1, или 2, или 3 Д в зависимости от того, что
там написано, или же, если стоит '. -' Д вычленить текст, о котором заранее я
вообще ничего не знаю.. Hаписать маску для этого зела несложно: достаточно
вложить в одни скобки альтернацию между "текст1|текст2|.." и "неизвестный
текст", например, так:
m/.*(:(текст1|текст2| ...))|\. Д (.*))/
Однако данное решение не позволяет мне вычленить элементы текста ни для
случая двоеточия, ни для случая точки-тире, так как скобки воспринимаются как
управляющие, а не как разделяющие элементы формирующегося списка.. Другими
словами:
($first,$second)=m/(.*)(:(текст1|текст2| ...))|\. Д (.*))/
вернет отнюдь не то, что от нее требуется.. Для решения приходится
сравнивать строку с выражением дважды, что неэффективно при количестве этих
строк, близком к одному миллиону.. (заметим, что описываемый Д всего один этап
из нескольких)..
2. Иногда второй из выкрапляемых кусков текста строки определяется не
последующим за ним символом, а предыдущим:
Выражения: баран, : козел, другие: баранчик
Идея в том, что по шаблону
\(.*: баран.*)\
я получу "жадную" строчку:
Выражения: баран, : козел, другие: баран
а мне нужно только
Выражения: баран
Слово "другие" известно мне заранее: оно стоит всюду, но включить в шаблон
это слово для того, чтобы следующее за ним игнорировалось, по-моему нельзя.. :-/
Как нельзя отключить и "жадность" регэкспов.. Что же делать?..
... E pur si muove! (most popular science fiction) [ermakov@library.madi.ru]
--- powered by GoldED for MMX -=[ _Space Alien_ ]=-
* Origin: .../peace/, /love/, /unity/, /respect/... (2:5020/3123)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/27393d70f2e8.html, оценка из 5, голосов 10
|