The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Получить все числа из строки"
Отправлено EXA, 23-Июн-10 20:32 
День добрый, про лазил в инете, по пробовал по всякому, но не получается у меня выдрать одним регулярным выражением, все числа из такой строки
POLYGON((8136707.36 6414194.03,8136757.2 6414216.8,8136786.14 6414153.45,8136800.67 6414160.1,8136808.35 6414143.29,8136793.87 6414136.67,8136803.01 6414116.66,8136753.18 6414093.88,8136743.62 6414114.81,8136730.03 6414108.6,8136722.53 6414124.99,8136736.07 6414131.18,8136707.36 6414194.03))
все числа, без скобок и полигона, вот что последние испробовал, но оно не очень, вообще не то

my $digit = '[+-]?\d+\.?\d*\s[+-]?\d+\.?\d*\,';
if ($i =~ /(\w+\(\()($digit{1,})/)
    {
        print "1 $1\n";    # Результат '1'
        print "2 $2\n";    # '2'
        print "3 $3\n";  # '3'
        print "все совпадение $+\n";    # '2'
        print "1,2 $&\n";    # '1 два 2'
        print "все до совпадения $`\n";    # 'Один '
        print "все после совпадения $'\n";    # ' и три 3'
        print "обозначает последнее совпадение $+\n";
   }
Вот такое выдаёт:
1 POLYGON((
2 8136707.36 6414194.03,
3
все совпадение 8136707.36 6414194.03,
1,2 POLYGON((8136707.36 6414194.03,
все до совпадения
все после совпадения 8136757.2 6414216.8,8136786.14 6414153.45,8136800.67 6414160.1,8136808.35 6414143.29,8136793.87 6414136.67,8136803.01 6414116.66,8136753.18 6414093.88,8136743.62 6414114.81,8136730.03 6414108.6,8136722.53 6414124.99,8136736.07 6414131.18,8136707.36 6414194.03))
обозначает последнее совпадение 8136707.36 6414194.03,

Пробовал по разному
if ($i =~ /(\w+\(\()(?=$digit)/)
Ошибки нет, но второе значение пусто.
if ($i =~ /(\w+\(\()(?$digit)/)
То такая ошибка
Sequence (?[...) not recognized in regex; marked by <-- HERE in m/(\w+\(\()(?[ <-- HERE +-]?\d+\.?\d*\s[+-]?\d+\.?\d*\,)/ at ./get_bounds.pl line 41.
if ($i =~ /(\w+\(\()(?$digit+)/)
То такая ошибка
Sequence (?[...) not recognized in regex; marked by <-- HERE in m/(\w+\(\()(?[ <-- HERE +-]?\d+\.?\d*\s[+-]?\d+\.?\d*\,+)/ at ./get_bounds.pl line 41.
В общем я так сказать исчерпался по красивому енто сделать.

$digit{1,} - не могу ни как указать, что он такой шаблон искал столько раз сколько нужно.
Помоги те плиз разобраться.

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру