![]() |
|
Модераторы: ginnie |
![]()
|
|
| Pfailed |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
Возможно ли не захватывать часть строки в захватывающих скобках?
Пример:
Здесь я хотел бы чтобы захватывающие скобки при захвате пропустили "i*" и в результате получилось
Но как обозначить, что я не хочу захватывать "i*"? Я понимаю что можно сделать две пары захватывающих скобок и таким образом пропустить ненужные мне символы. Но меня интересует именно такой вариант, где я могу пропустить часть строки в захватывающих скобках. |
||||
|
|||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 5 Всего: 10 |
Зачем две пары?
|
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
Мне необходимо помимо числа получить и его знак, как указано в первом сообщении.
|
|||
|
||||
| Egik2 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 302 Регистрация: 29.7.2008 Где: Агудзера Репутация: нет Всего: 11 |
Подозреваю, что какая бы извращенная фантазия не была у создателей Perlа, в том числе у Ларри Волла.
До такого они не додумались -------------------- Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall) a-nav.com developer-blog.ru world-poetry.org |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 5 Всего: 10 |
Аа понял
А чем не устраивают два сохранения? |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
На мой взгляд получилось бы эстетичнее чем с двумя захватами.
Интерес тут скорее теоретический, чем практический. Но думаю в будущем может пригодиться. |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
Нашел подтверждение, что это сделать невозможно. Что ж, жаль.
|
|||
|
||||
| Logo |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 5 Всего: 10 |
Вовсе нет. Если одному захвату на самом деле соответствует два - никакой логики, запутаться на раз-два. Не встречал задачи где бы это пригодилось. Впрочем, если очень хочется, есть такой вариант
|
||||
|
|||||
| Pfailed |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
Просто на днях писал на C++ и заюзал библиотеку регулярных выражений pcre. Вот в голову и пришла мысль, что если бы удалось пропустить ненужные мне символы в строке, то код бы мой слегка упростился, не нужно бы было заводить лишнюю переменную и проверять дополнительное условие:
А иначе приходится писать так:
В Perl конечно эта проблема менее актуальна, так как простые вещи здесь делаются просто.
Оригинально, но это не решает поставленную задачу. |
||||||
|
|||||||
| vadiml |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: нет Всего: 7 |
А почему тогда просто не затирать i* ?
$test1 = '+i*5'; $test1 =~ s/i\*//; # $test == '+5' |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 6 Всего: 39 |
Да понятно, что есть несколько способов добиться нужного результата. Просто было интересно, а можно ли сделать так как я предложил в первом сообщении.
|
|||
|
||||
| Logo |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 5 Всего: 10 |
На C++ сталкиваться с регспами не приходилось. На Perl же просто делается конкатенация, $1.$2, да и на других высокоуровневых языках так же.
Почему же? - разве что захват теперь называется не $1, а $capture; Но кроме Perl ни где работать не будет. Это сообщение отредактировал(а) Logo - 25.2.2010, 18:10 |
||||
|
|||||
![]()
|
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Регулярные выражения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |