Модераторы: ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Упрощение регулярного выражения 
:(
    Опции темы
antananarivu
Дата 15.10.2010, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 25.6.2010

Репутация: нет
Всего: нет



Здравствуйте!
У меня есть такое вот регулярное выражение:
Код

$s =~ s/[A-Za-z]/[A-Z]/g;
$s =~ s/[0-9]/[0-9]/g;

То есть любой символ из A-Z или a-z превращается в [A-Z], а любой символ из 0-9 превращается в [0-9].
Как это сделать в одну строчку? Заранее спасибо.
PM MAIL   Вверх
Logo
Дата 15.10.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 5
Всего: 10



Код

$s=~s/[$_]/[$_]/gi for 'A-Z','0-9'


Или, еще короче

Код

$s=~s/[$_]/[$_]/gi for<A-Z 0-9>


Это сообщение отредактировал(а) Logo - 15.10.2010, 12:57
PM MAIL   Вверх
antananarivu
Дата 15.10.2010, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 25.6.2010

Репутация: нет
Всего: нет



Спасибо.
PM MAIL   Вверх
antananarivu
Дата 16.10.2010, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 25.6.2010

Репутация: нет
Всего: нет



Никак не могу найти как это сделать с помощью регулярного выражения:
удалить первый символ из строки, если он равен А.
PM MAIL   Вверх
antananarivu
Дата 16.10.2010, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 25.6.2010

Репутация: нет
Всего: нет



Вопрос неактуален. 
Всем спасибо.
PM MAIL   Вверх
MasterOfRegex
Дата 25.10.2010, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.10.2010

Репутация: нет
Всего: нет



Цитата(antananarivu @ 15.10.2010,  11:33)
То есть любой символ из A-Z или a-z превращается в [A-Z], а любой символ из 0-9 превращается в [0-9].
Как это сделать в одну строчку? Заранее спасибо.

Цикл здесь лишний:
Код

$s =~ s/([A-Za-z0-9])/[$1]/g;

Я недавно начал писать углублённые статьи по Perl регулярным выражениям, в основном по своей книжке по Perl regex, и отвечаю на интересные вопросы.

Сергей
PM MAIL   Вверх
Logo
Дата 25.10.2010, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 5
Всего: 10



Прогоните на любом тексте ваш код, и увидите, чем отличается результат.
PM MAIL   Вверх
MasterOfRegex
Дата 27.10.2010, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.10.2010

Репутация: нет
Всего: нет



Цитата(Logo @ 25.10.2010,  16:48)
Прогоните на любом тексте ваш код, и увидите, чем отличается результат.

Ой, верно, я неправильно понял условие этой странной задачки... Тогда без вставки кода не обойтись:
Код

$s =~ s/([A-Za-z])|[0-9]/$1 ? "[A-Z]" : "[0-9]"/eg;

PM MAIL   Вверх
Logo
Дата 27.10.2010, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 5
Всего: 10



Ага. Но мой код все равно короче.
PM MAIL   Вверх
MasterOfRegex
Дата 28.10.2010, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.10.2010

Репутация: нет
Всего: нет



Да, экономия 11 байтов. :-) А я в книгах по Перлу не видел конструкции типа <A-Z 0-9> и не читал о том, как она работает.
PM MAIL   Вверх
Logo
Дата 28.10.2010, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 5
Всего: 10



См. задачу ТС, его цель сделать как можно короче, однострочник.

Цитата

А я в книгах по Перлу не видел конструкции типа <A-Z 0-9> и не читал о том, как она работает. 

http://perldoc.perl.org/perlop.html#I/O-Operators

PM MAIL   Вверх
KSURi
Дата 28.10.2010, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: нет
Всего: 27



Конструкция <A-Z 0-9> хоть и работает (удивительно), но мягко говоря "не в тему". Тут скорее qw(A-Z 0-9) должно быть.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
Logo
Дата 29.10.2010, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 5
Всего: 10



Цитата

Конструкция <A-Z 0-9> хоть и работает (удивительно), но мягко говоря "не в тему". Тут скорее qw(A-Z 0-9) должно быть. 

Ни чего удивительного. <> В этом случае работает как файловые шаблоны. Т.к. спец символы не используются, он просто возвращает список строк.
qw(A-Z 0-9) тут не дает выигрыша, даже наоборот
Код

$s=~s/[$_]/[$_]/gi for'A-Z','0-9'
$s=~s/[$_]/[$_]/gi for qw(A-Z 0-9)

PM MAIL   Вверх
KSURi
Дата 29.10.2010, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: нет
Всего: 27



Денежный выигрыш?)


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
Logo
Дата 29.10.2010, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 5
Всего: 10



Ты что :o. Азартные игры запрещены. Чисто моральный;)

Добавлено через 1 минуту
ПРОФИТ!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




[ Время генерации скрипта: 0.0536 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.