You are here: PSPad forum > Bug report / Hlášení chyb > nahrazovani regulernim vyrazem s podminkou "lookahead"

nahrazovani regulernim vyrazem s podminkou "lookahead"

#1 nahrazovani regulernim vyrazem s podminkou "lookahead"

Posted by: vbr | Date: 2021-04-10 13:05 | IP: IP Logged

Zdravim,
pri overovani vyrazu k nahrazeni opakovanych rozdelovniku v postu:
forum.pspad.com
jsem si vsiml necekanych rozdilu mezi hledanim a nahrazenim regulernim vyrazem.

pouzil jsem upraveny text s doplnenymi spojovniky, ktere je treba nahradit za podtrzitka, prave jen v radku konkretniho tagu Name:
<Name>-a-r-ch-iv-e-ad-d2@@-@-</Name>

Reseni by bylo mozne s podminkami "lookaround", ktere vymezuji nutny (nebo zakazany) sousedni text vedle nalezu, ale nejsou do nalezu pocitany, jsou tak mozne opakovane kroky hledani.
www.regular-expressions.info

PSPad nyni lookarounds zrejme podporuje, jen s nekterymi omezenimi.

Jedna moznost by byl "lookbehind" - pred hledanym znakem - se musi nachazet <Name>a pripadne libovolne dalsi znaky:
(?<=<Name>.*)-

Zde PSPad hlasi chybu vyrazu pro vyhledavani - zrejme nepodporuje lookbehind s promenlivou delkou .* ale jen pevny rozsah, coz nektere knihovny regex maji. To je tedy zrejme ocekavane omezeni.

Nadejneji vypada "lookahead" na nasledujici zaviraci tag </Name>
-(?=.*</Name>)

Toto uz v pspadu pro vyhledavani funguje, opakovanym hledanim se nachazeji rozdelovniky na radce pred </Name>, a ne v jinych radkach.

Bohuzel ale nefunguje nahrazeni - pri zadani podrtrzitka _ do nahrazovaciho vyrazu a vyvolani nahrazeni se zobrazi spravne hlaseni - Hledany vyraz "-(?=.*</Name>)" byl nahrazen 9x
ale v textu zustanou beze zmeny puvodni rozdelovniky.
Pokud se zada rucni potvrzovani zmen, nalezy se postupne zvyraznuji, ale po potvrzeni nahrady zustanou rozdelovniky.

Mozna zpusobuje problem nulova velikost zaberu "Zero-Length Assertions", ale hledane spojovniky jsou zyraznovany spravne, jen nejsou nahrazeny.

(PSPad 5.0.6, 589; Win 7)

Zdravim a dekuju
vbr

Options: Reply | Quote | Up ^


#2 Re: nahrazovani regulernim vyrazem s podminkou "lookahead"

Posted by: pspad | Date: 2021-04-10 13:16 | IP: IP Logged

Bojím se, že tohle nějak jednoduše opravit nepůjde.
Hledání funguje, ale při nahrazování s tím prostě nepočítá.

Řešením je konečně kompletně přepsat hledání/nahrazení, aby podporovalo i víceřádkové hledání apod. Zkusím si na to vyšetřit pár dnů.

Options: Reply | Quote | Up ^


#3 Re: nahrazovani regulernim vyrazem s podminkou "lookahead"

Posted by: vbr | Date: 2021-04-10 14:51 | IP: IP Logged

Diky za potvrzeni,
viceradkove hledani a nahrazovani by urcite bylo vyborne, chapu, ze je to asi slozitejsi oblast mezi komponentou editoru, vyhledavaci knihovnou, navic s evidovanim zmen pro kroky zpet apod....
Zdravim,
vbr

Options: Reply | Quote | Up ^






Editor PSPad - freeware editor, © 2001 - 2024 Jan Fiala, Hosted by Webhosting TOJEONO.CZ, design by WebDesign PAY & SOFT, code Petr Dvořák, Privacy policy and GDPR