Article View: pl.comp.lang.perl
Article #1203/\+(?:\(.*?\)|.*?)(?:$|(?=\+))/g
From: Qrczak
Date: Fri, 10 Apr 1998 08:07
Date: Fri, 10 Apr 1998 08:07
39 lines
2416 bytes
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!qrczakShow 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