Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Как написать регулярное выражение вместо функции substr()  (Прочитано 758 раз)

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

Оффлайн AkulaBig

  • Автор темы
  • Участник
  • *
  • Сообщений: 195
    • Просмотр профиля
Пишу скрипт на перле, хотя это совсем не важно. Встроенная функция для вырезания символов из строки substr() во многих скриптовых языках не понимает кирилицу в юникоде :) Естественно возникает желание заменить ее на посимвольную обработку строки. Попробовал применить регулярное выражение $sub_str =~ s/[a-zA-Zа-яА-Я]+//; Но вырезается целое слово, а хочется символ. Ну и последующий пробел, тире, опять пробел уже не вырезаются. Помогите правильно составить регулярное выражение.
ЗЫЖ Единствееная моя цель - это посимвольное постепенное обрезание строки. Так что с благодарностью приму любой способ это сделать со строкой на кириллице скриптовым языком.

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Как написать регулярное выражение вмест&#
« Ответ #1 : 28 Апрель 2010, 22:47:55 »
Пишу скрипт на перле, хотя это совсем не важно. Встроенная функция для вырезания символов из строки substr() во многих скриптовых языках не понимает кирилицу в юникоде :)
поэтому например на php существует mb_substr
string mb_substr  (  string $str  ,  int $start  [,  int $length  [,  string $encoding  ]] )
в питоне например для реализации вашей идеи прекрасно подойдут срезы строк
« Последнее редактирование: 28 Апрель 2010, 22:56:17 от Владимир Николаевич »

Оффлайн DnSL48

  • Активист
  • *
  • Сообщений: 286
    • Просмотр профиля
Задача поставлена неправильно. Если необходимо вырезать символ, тогда квантификатор + там не нужен. Да и если хочется посимвольной обработки, тогда лучше смотреть в сторону конечных автоматов, ибо регулярные выражения предназначены для обработки строк, а не символов.
ArchLinux x86_64

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
я дак понял что задача примерно такая
дано:
qwerty
надо:
qwerty
werty
erty
rty
ty
y

Оффлайн easy2002

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2786
  • Мурманск
    • Просмотр профиля
Единствееная моя цель - это посимвольное постепенное обрезание строки. Так что с благодарностью приму любой способ это сделать со строкой на кириллице скриптовым языком.

bash подойдет?

#!/bin/bash
str='Как написать регулярное выражение вместо функции substr()'
until [ ${#str} -le 0 ]; do
  echo $str
  str=${str:1}
done
Tempora mutantur et nos mutantur in illis

Оффлайн AkulaBig

  • Автор темы
  • Участник
  • *
  • Сообщений: 195
    • Просмотр профиля
я дак понял что задача примерно такая
дано:
qwerty
надо:
qwerty
werty
erty
rty
ty
y
Задача именно такая. Про mb_substr знаю, но ведь ее надо подключать и соответственно устанавливать какие-то дополнительные пакеты. Поэтому хотелось-бы дефолтными средствами.

Пользователь решил продолжить мысль 29 Апрель 2010, 05:27:18:
bash подойдет?

#!/bin/bash
str='Как написать регулярное выражение вместо функции substr()'
until [ ${#str} -le 0 ]; do
  echo $str
  str=${str:1}
done

Хоть баш, хоть что. Спасибочки, после работы буду пробовать
« Последнее редактирование: 29 Апрель 2010, 05:27:18 от AkulaBig »

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
python
s = "tratate"
i = 0

#while ( i < len(s) ):
#    print( s[i::] )
#    i += 1

for it in s:
    print(s[i::])
    i += 1

 

Страница сгенерирована за 0.057 секунд. Запросов: 25.