Article View: pl.comp.lang.perl
Article #52372Re: Akademicki problem z funkcja split
From: Andrzej Adam Filip
Date: Sun, 29 Jan 2012 18:43
Date: Sun, 29 Jan 2012 18:43
33 lines
2674 bytes
2674 bytes
tomjas <tomjas@WYTNIJTOpoczta.onet.pl> pisze:
> On Sun, 29 Jan 2012 09:44:54 +0000 (UTC), Stachu 'Dozzie' K. wrote:
>> On 2012-01-28, tomjas <tomjas@WYTNIJTOpoczta.onet.pl> wrote:
>>> Próbuję sobie przypomnieć regexpy korzystając z perlretut. I mam problem
>>> z funkcją split, a mianowicie:
>> [...]
>>> print join(",",split /(a|b)+/,"12aba34ba5") # wynik: 12,a,34,a,5
>>>
>>> Może mi ktoś łopatologicznie wytłumaczyć krok po kroku w jaki sposób
>>> perl dopasowuje wzorzec i dzieli ten ciąg?
>>
>> perldoc -f split, szukasz opisu dla regexpów z nawiasami.
>>
> Ech... Na to, to akurat wpadłem, ale za diabła nie rozumiem.
> "If the PATTERN contains parentheses, additional list elements are
> created from each matching substring in the delimiter."
> Tzn, rozumiem to, ale w takim razie dlaczego w powyższym przykładzie
> w wyniku nie ma "b"? Ja rozumuję tak:
> perl szuka po kolei w ciągu najpierw wzorca "a" - mija "12" dochodzi do
> "a", dalej szuka bo we wzorcu jest "+" - następnym elementem w ciągu
> jest "b" więc nie pasuje, ale pasuje "b" z wzorca - idzie dalej bo znów
> "+" - dalej "a" więc nie pasuje. Zatem ciągiem rozdzielającym jest "ab",
> więc do pierwszego elementu tablicy wrzuca "12", a w drugim powinien być
> ciąg rozdzielający bo przecież są nawiasy. Co źle rozumiem?
Widać perl daje ci jako element zwracany przez split ostatni element
tego do czego pasuje (a|b)+ [ostatnie a lub b w ciągu].
Zobacz co ci zwróci:
print join(",",split /((a|b)+)/,"12aba34ba5")
Po prostu wpadłeś na niezbyt intuicyjne, trudne do krótkiego wyjaśnienia
"detale implementacji".
Technical Details
Message-ID:
<877h0a9wov.fsf@fenix.anfi.homeunix.org>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!eternal-september.org!feeder.eternal-september.org!mx04.eternal-september.org!.POSTED!not-for-mailReferences:
<slrnji8hfc.hfn.tomjas@krusty.domain> <slrnjia58k.j5o.dozzie@jarowit.net> <slrnjiahr5.1s8.tomjas@krusty.domain>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!eternal-september.org!feeder.eternal-september.org!mx04.eternal-september.org!.POSTED!not-for-mail From: Andrzej Adam Filip <anfi@onet.eu> Newsgroups: pl.comp.lang.perl Subject: Re: Akademicki problem z funkcja split Date: Sun, 29 Jan 2012 19:43:12 +0100 Organization: It is for me to know and for you to find out. Lines: 33 Message-ID: <877h0a9wov.fsf@fenix.anfi.homeunix.org> References: <slrnji8hfc.hfn.tomjas@krusty.domain> <slrnjia58k.j5o.dozzie@jarowit.net> <slrnjiahr5.1s8.tomjas@krusty.domain> Mime-Version: 1.0 Injection-Info: mx04.eternal-september.org; posting-host="jqwderxp47gN1tZVJS2Sbw"; logging-data="25318"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/bBE7X4SkDlfcRHP8JnToU" Cancel-Lock: sha1:E2erFqJlJjxUIQPea7KIX5AVIEQ= sha1:GyzA4HsA/wTYG0TYlXw3pCWFrZI= Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit