Помогите с регулярным выражением
Модератор: Модераторы разделов
-
Devider
- Сообщения: 476
- ОС: GNU/Linux
Помогите с регулярным выражением
Есть строка типа #a1$bcd#ef5#gh, т.е. произвольные буквы-цифры и разделитель в виде # или $ . Каким выражением это разобрать, при условии что ПЕРВЫЙ разделитель не учитывается? Т.е нужно получить подстроки #a1 bcd ef5 gh , При этом первого # или $ может и не быть, т.е. может строка может быть вида a1$bcd#ef5# .
-
alfss
- Сообщения: 262
Re: Помогите с регулярным выражением
perl
print join(':', split(/\$|#/, '#a1$bcd#ef5#gh'));
print join(':', split(/\$|#/, '#a1$bcd#ef5#gh'));
-
Devider
- Сообщения: 476
- ОС: GNU/Linux
-
Devider
- Сообщения: 476
- ОС: GNU/Linux
Re: Помогите с регулярным выражением
Сорри, я не это имел ввиду.
Слеши на концах это типа кавычки? ТОгда что остается? $ - конец строки | или # - разделитель... а \ что значит? Я просто смысла этого не понимаю.
В перле ни разу не силен, но получаю
print join(':', split(/\$|#/, '#a1$bcd#ef5#gh'));
Слеши на концах это типа кавычки? ТОгда что остается? $ - конец строки | или # - разделитель... а \ что значит? Я просто смысла этого не понимаю.
В перле ни разу не силен, но получаю
$ perl -e 'print join(':', split(/\$|#/, '#a1$bcd#ef5#gh'));'
syntax error at -e line 1, near "join(:"
Execution of -e aborted due to compilation errors.
-
alfss
- Сообщения: 262
Re: Помогите с регулярным выражением
split(/\$|#/, 'строка');
разделитель $ или #
\ - экранирование
разделитель $ или #
\ - экранирование
Спасибо сказали:
-
Devider
- Сообщения: 476
- ОС: GNU/Linux
Re: Помогите с регулярным выражением
Разобрался, спасибо. ПРишлось в файл запихнуть. Вот вывод.
ПРоблема в том, что разделителями являются все # и $ кроме первого, т.е. вывод нужен такой:
perl sc.pl
:a1:bcd:ef5:gh
ПРоблема в том, что разделителями являются все # и $ кроме первого, т.е. вывод нужен такой:
#a1:bcd:ef5:gh
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Помогите с регулярным выражением
Код: Выделить всё
$ echo '#a1$bcd#ef5#gh' | sed 's/\(.\)[$#]/\1:/g'
#a1:bcd:ef5:ghесли встрачаются пустые поля (два идущих подряд разделителя), выражение, конечно, придётся усложнить.
upd. если можно несколько идущих подряд разделителей заменить на один символ «:», тогда так:
Код: Выделить всё
$ echo '#a1$bcd#$#ef5$#gh' | sed 's/\(.\)[$#]\+/\1:/g'
#a1:bcd:ef5:ghupd2. если пустые поля надо учитывать, тогда вот эдак:
Код: Выделить всё
$ echo '#a1$bcd#$#ef5$#gh' | sed 's/\(\(^.\)\?[^$#]*\)[$#]/\1:/g'
#a1:bcd:::ef5::ghПисать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Спасибо сказали: