Показать полную графическую версию : регэкспы в Prel'е
Вчера познакомился с этим удивительным способом записи регэкспов, и понял, что конвертор кирилицы в этом форуме сделан очень тормознуто.
Короче, как делать односимвольные замены с помощью tr/// я понял:$str =~ tr/abvgde/абвгде/;
А как быть с двух-символьными? Если написать$str =~ tr/sh/ш/; То оно мне просто выдаёт ошибку, как быть?
vasketsov
26-03-2002, 16:30
ivank
Странно это очень. может это перл так на кириллицу реагирует?
У tr/// если первый аргумент длиннее второго, и второй не пуст, нужное число раз повторяется последний символ второго аргумента. То есть, у тебя должно получиться шш.
Используй s/// - там уж точно работать будет.
vasketsov
Я сделал двухбуквенные комбинации через s///, а однобуквенные через tr///... Лучше всё было бы в один вызов уложить -- мне кажется, так быстрее...
А если странно то, что ошибка, то это я неверно (совсем) выразился -- работает, но не так как хотелось бы, т.е. именно два шш появляется.
vasketsov
26-03-2002, 20:44
ivank
Лучше всё было бы в один вызов уложить
например, так.
tr/sh/ш|/
вместо палки - любой символ, которого нет. Палки, насколько я знаю код, быть не должно.
то есть, вторым символом пишешь палку.
Затем
s/\|//g
за 2 прохода - все готово.
vasketsov
Тогда оно будет реагировать не на комбинацию "sh", а на отдельные буквы, т.е. "ostrov pasha", станет "оштров паса"... До меня в конце концов дошло -- обрабатывать tr-ом можно только посимвольно :(
vasketsov
27-03-2002, 13:01
не на комбинацию "sh", а на отдельные буквы
да, че-то я чушь пропер.
а что, сильно s/// не устраивает?
по времени мерял разницу?
это ж инет все-таки, львиная доля времени обычно на связь тратится, а не на скрипт.
vasketsov
На самом деле особых проблем в этом нет, просто хотелось как "настоящий перловец" научиться нечитаемые регэкспы писать :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.