🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #1203

/\+(?:\(.*?\)|.*?)(?:$|(?=\+))/g

#1203
From: Qrczak
Date: Fri, 10 Apr 1998 08:07
39 lines
2416 bytes
Chciałbym się spytać, czy coś takiego jak w Temacie ma obowiązek
zadziałać tak jak chcę. W praktyce u mnie działa, ale nie wiem, czy
można zakładać, że tak będzie zawsze...

Chodzi mi mianowicie o to "\(.*?\)|.*?". Kolejność obu możliwości ma
znaczenie! Chcę żeby w przypadku kiedy zaczynamy od "+(", wziąć wszystko
aż do następnego ")+", łącznie z ewentualnymi wewnętrznymi "+".
Teoretycznie on mógłby dopasować to do drugiego wariantu: ".*?",
i zatrzymać się na pierwszym "+" w nawiasie, jednak tego nie robi
- i dobrze! ale może któraś wersja zacznie.

Mogę oczywiście zamienić to na "\(.*?\)|[^(].*?|" albo nawet na
"\((?:[^)]|\)(?!\+))*\)|[^+(][^+]*|", nie ufając ".*?" i mając pewność, 
że zawsze będzie dobrze (o ile się nie pomyliłem), ale, jak widać,
komplikując wyrażenie. Co radzicie?

A może zaproponujecie lepszą metodę na podzielenie napisu postaci:
    1+222+(3+(5)6+7)+8
na:
    1  222  (3+(5)6+7)  8
niż:
    map { s/^\+//; różne_inne_rzeczy; }
    ("+" . ów_napis) =~ /powyższe_wyrażenie/g
?

BTW: W tych nawiasach będą komendy basha. Przyjąłem założenie, że po
prostu nie może w nich wystąpić ciąg ")+". Lepiej by było rozpoznawać
zagnieżdżenie nawiasów, czego nie da się załatwić jednym wyrażeniem
regularnym, ale może macie pomysł, jak to w miarę prosto zrobić?
Oczywiście nawiasy wyeskejpowane albo w cudzysłowach mają się nie
liczyć, jak to w szelu. Załóżmy, że komenda jest poprawnie zbudowana.
Pewnie jednak szkoda zachodu, ")+" można wyeskejpować jeśli ktoś
przypadkiem będzie tego potrzebował...

-- 
                                 QRCZAK
    __("<              Marcin Kowalczyk
    \__/              qrczak@knm.org.pl
     ^^      http://qrczak.home.ml.org/
Technical Details
Message-ID: <Pine.LNX.3.96.980410093444.16675A-100000@qrnik.knm.org.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.nask.pl!orion.cst.tpsa.pl!news.task.gda.pl!qrnik.knm.org.pl!qrnik.knm.org.pl!qrczak

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!news.nask.pl!orion.cst.tpsa.pl!news.task.gda.pl!qrnik.knm.org.pl!qrnik.knm.org.pl!qrczak
From: Qrczak <qrczak@knm.org.pl>
Newsgroups: pl.comp.lang.perl
Subject: /\+(?:\(.*?\)|.*?)(?:$|(?=\+))/g
Date: Fri, 10 Apr 1998 10:07:08 +0200
Organization: Klub Nieszkodliwych Manjaków
Lines: 40
Message-ID: <Pine.LNX.3.96.980410093444.16675A-100000@qrnik.knm.org.pl>
NNTP-Posting-Host: ppp3-cst151.warszawa.tpnet.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit