Autor | Zpráva | ||
---|---|---|---|
peCan Profil |
#1 · Zasláno: 27. 8. 2010, 15:01:24
Ahoj,
Prosím o pomoc s RV. Mám XML se vzory, které jsou psané pro C# a využívají pojmenované subvýrazy. V jednom vzoru bohužel může být více skupin (pojmenovaných <R>). Potřebuji tyto vzory aplikovat na libovolný text, v případě shody místo <R> dát "*****". Zpracování probíhá v PHP. // načtení XML vzorů, tady jsem to dal do pole $ReplacementsArray = array( 'database "(?<R>[^"]*)"', "database '(?<R>[^']*)'", "user '(?<R>[^']*)'", "The process cannot access the file '(?<R>[^']*)'", "Syntax error converting the nvarchar value '(?<R>[^']*)'", "The operating system returned the error '[^']*' while attempting '[^']*' on '(?<R>[^']*)'", "Transaction \(Process ID (?<R>\d+)\) was deadlocked" ); // foreach $ExceptionTextHeader = preg_replace("/".str_replace("<R>", "P<R>", $pattern)."/", '"*****"', $ExceptionTextHeader); Bohužel tento RV mě místo: Bla bla bla. Transaction (Process ID *****) was deadlocked. Bla bla bla Udělá Bla bla bla. *****. Bla bla bla Tedy se nahradí celý text co je v RV, nikoliv jen označená skupina. Samozřejmě bych mohl udělat nahrazení místo ***** celý text, ale jde o to, že v tom XML je několik desítek až stovek RV... |
||
tiso Profil |
#2 · Zasláno: 27. 8. 2010, 15:23:19
peCan: nechápem čo chceš vlastne spraviť… Desiatky až stovky regulárnych výrazov?
|
||
peCan Profil |
#3 · Zasláno: 28. 8. 2010, 10:37:43
Ahoj,
V zásadě jde o to, že v textu potřebuji najít a nahradit určitou část textu za *****. Tak jako jsem uvedl v příkladu: Mám např. RV: "Transaction \(Process ID (?<R>\d+)\) was deadlocked". Místo té skupiny <R> potřebuji dostat *****. Vstupní text je: Bla bla bla.... Transaction (Process ID 52) was deadlocked. Bla Bla Bla... A já potřebuji dostat: Bla bla bla.... Transaction (Process ID *****) was deadlocked. Bla Bla Bla... preg_replace("/".str_replace("<R>", "P<R>", $pattern)."/", '"*****"', $ExceptionTextHeader); Ano, mohl bych udělat něco jako: preg_replace("/Transaction \(Process ID (?P<R>\d+)\) was deadlocked/", 'Transaction (Process ID *****) was deadlocked', $ExceptionTextHeader); Ale to nechci, protože bych musel upgravovat hrozně obsáhlé XML, kde jsou těch vzorů stovky. |
||
tiso Profil |
#4 · Zasláno: 28. 8. 2010, 11:26:10
peCan: mohli by ti pomôcť tvrzení o následujícím/předcházejícím, viď Speciální závorkové konstrukce, ak nie, tak si ten reťazec uzátvorkuj po jednotlivých častiach (Transaction…)(<R>…)(was…) a nahrádzaj ich za '\\1 ***** \\3'
|
||
Časová prodleva: 14 let
|
0