Dodaj do ulubionych

Problemik z Perlem

16.07.15, 13:26
W procedurze ( działającej, znalezionej w sieci ), która ma wstawiać przecinki co trzy cyfry w znakowej reprezentacji liczby zasadniczy wiersz jest taki:

$input =~ s<(\d\d\d)(?=\d)(?!\d*\.)><$1\,>g;

Czy ktoś mógłby wyjaśnić, co robi wytłuszczony fragment wyrażenia regularnego, czyli
ciąg (?=\d)(?!\d*\.) ?
Dodam, że po usunięciu tego wytłuszczonego fragmentu procedura działa identycznie dla liczb całkowitych.
Obserwuj wątek
    • wariant_b Re: Problemik z Perlem 16.07.15, 15:34
      A sprawdzałeś na liczbie 1234.5678?

      Zbędny fragment akurat dotyczy części ułamkowej,
      która nie powinna być rozdzielana przecinkami.
      Kolejność w zapisie \d*\. wynika z wcześniejszego rewersu tekstu,
      ale analogiczny wzór da się również zapisać bez odwracania tekstu.
      • indris Re: Problemik z Perlem 16.07.15, 18:01
        wariant_b napisał:

        " A sprawdzałeś na liczbie 1234.5678?

        Zbędny fragment akurat dotyczy części ułamkowej, która nie powinna być rozdzielana przecinkami. Kolejność w zapisie \d*\. wynika z wcześniejszego rewersu tekstu,
        ale analogiczny wzór da się również zapisać bez odwracania tekstu."

        Domyślałem się tego i sprawdziłem
        Wersja 'prymitywna' daje 1,234.5,678
        Wersja 'subtelniejsza' 1,234.5678
        Chciałbym tylko jeszcze zrozumieć, co w wyrażeniu regularnym znaczy zapis
        (?=\d)(?!\d*\.) bo w dostępnej mi aktualnie literaturze nie mogłem ( albo nie umiałem ) tego znaleźć.
        • wariant_b Re: Problemik z Perlem 16.07.15, 20:21
          > Chciałbym tylko jeszcze zrozumieć, co w wyrażeniu regularnym znaczy zapis
          > (?=\d)(?!\d*\.)

          Mamy tu tzw. Lookahead Zero-Length Assertions w wersji pozytywnej i negatywnej.
          Zapis (?= \d) ogranicza dopasowywanie trzech cyfr do następujących po nich ciągów spełniających warunek, że jest w nich cyfra, a drugi (?! \d*\.) wyklucza ciągi zera
          lub więcej cyfr zakończone kropką.
          • kalllka Re: Problemik z Perlem 17.07.15, 10:30
            ,., chciałabym jeszcze w/ w temacie:
            Za nic nie mogę znaleźć odpowiedzi, na ludzkie pytanie: dlaczego papugi mówią /?/

            / ktoś sprytnie, w 2012 roku odpowiedział-ponieważ maja "gruby język" , ale nawet nowa, tegoroczna implementacja perły nie mogła wprowadzić w sztywne translatory (adwokatów) bazy synonimów, tym bardziej grypsery/

          • indris Re: Problemik z Perlem 17.07.15, 18:02
            Dziękuję !!! Szczególnie jestem wdzięczny za podanie określenia Lookahead Zero-Length Assertions , bo dzięki temu wiem czego szukać po skorowidzach i wyszukiwarkach. I w jednej z książek, które mam od dawna nawet znalazłem...

Nie masz jeszcze konta? Zarejestruj się


Nakarm Pajacyka