Автор Тема: переменную из регулярного в sub  (Прочитано 2908 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн GrAfF

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 59
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
переменную из регулярного в sub
« : 13 Марта 2004, 16:13:19 »
Hi!
Помогите плиз, очень срочно нужно.
Пишу переформатилку текстов.
Код в основном состоит из строк вроде:
$text =~ s/\\n/
/g;
$text =~ s/   /   /g;

То есть вся переменная много раз обрабатывается кучей регэкспов.

Нужно вместо чисел подставлять их длину их строки, то есть как-то заменять ([0-9]*) на length($1). Но, похоже, это не поддерживается.

Как при таком построении "движка" прикрутить обработку чисел?
WBR, GrAfF.

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
переменную из регулярного в sub
« Ответ #1 : 13 Марта 2004, 16:30:27 »
Почитай про модификатор /e в perldoc perlre
А также по теме perldoc -f study
0 OK, 0:1

Оффлайн GrAfF

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 59
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
переменную из регулярного в sub
« Ответ #2 : 13 Марта 2004, 18:13:02 »
Спасибо, почитал. В первом нашел только часть Warning on \\1 vs $1, да и там ничего не понятно. Не настолько разбираюсь в регэкспах, чтобы понять о чем там. Да про study что-то вещают про скорость, время и частоту встречи букв в английском.
Такой простой вопрос был. Надеялся на четкий ответ. :(
WBR, GrAfF.

Оффлайн Mog.

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 828
  • +0/-0
  • 0
    • Просмотр профиля
переменную из регулярного в sub
« Ответ #3 : 13 Марта 2004, 19:41:50 »
$text="text 12345 another text 789 more text 999999999";
$text =~ s/([0-9]+)/length($1)/ge;
print "$text";

Так устроит? Тут тебе и модификатор е присутствует, который говорит о том, что правая часть рег. выражения это фрагмент выполняемого кода.
Все болезни от нервов, только сифилис от удовольствия

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
переменную из регулярного в sub
« Ответ #4 : 13 Марта 2004, 19:42:38 »
s/(\\d+)/length($1)/ge
« Последнее редактирование: 13 Марта 2004, 19:50:05 от NeoNox »
The documentations is your friend

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
переменную из регулярного в sub
« Ответ #5 : 13 Марта 2004, 19:43:50 »
Во первых вопрос мутный. Какой же ты хочешь четкий ответ? Вот зайди сюда perldoc.narod.ru, возьми pdf о регах на русском. Почитай. Вот пример http://forums.webscript.ru/showthread.php?s=&postid=93267 использования модификатора.
Во вторых на операторе study я не акцентировал внимание. Он не обязателен, хотя и может ускорить работу в твоем случае.
0 OK, 0:1

Оффлайн GrAfF

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 59
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
переменную из регулярного в sub
« Ответ #6 : 13 Марта 2004, 21:26:18 »
Регэкспы я ещё на "Парсинге XML" неплохо понял, но вот эта проблема меня поставила в тупик.
Усем огромное спасибо! ;)
WBR, GrAfF.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28