Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Работа с регэкспами   Sergey Ermakov   31 Aug 2002 20:46:16 
 Re: Работа с регэкспами   InSAn \\(Panchuk Andrey\\)   02 Sep 2002 16:44:25 
Архивное /ru.perl/27393d70f2e8.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional