Regulární výrazy začátečník – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Regulární výrazy začátečník – Java – Fórum – Programujte.comRegulární výrazy začátečník – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
RomanM
~ Anonymní uživatel
2 příspěvky
31. 10. 2014   #1
-
0
-

Zdravím všechny,

jsem začátečník v programování JAVA/Android a potřeboval bych poradit ohledně regulárních výrazů. Mám takovýto text (String) a potřebuji v něm udělat úpravy:

64564985649179-VALUE
48371676163717-VALUE
54646146541665-VALUE
<DATA>
54541564147877-VALUE
54654654654654-VALUE
91798714457198-VALUE
87198796549798-VALUE
</DATA>
44554456465466-VALUE
46545454587121-VALUE
64546564487455-VALUE

Potřebuji nahradit text "VALUE", ale jen mezi <DATA></DATA>, ostatní ponechat.

Umím nahradit celý text mezi <DATA></DATA>  

text = text.replaceAll("<DATA>([^<]*)</DATA>", "POKUS");

ale nevím, jak nahradit jen to VALUE.
Výstup tedy požaduji takovýto: 

64564985649179-VALUE
48371676163717-VALUE
54646146541665-VALUE
<DATA>
54541564147877-NEWVALUE
54654654654654-NEWVALUE
91798714457198-NEWVALUE
87198796549798-NEWVALUE
</DATA>
44554456465466-VALUE
46545454587121-VALUE
64546564487455-VALUE

Prosím, poradíte někdo?

Děkuji.

Nahlásit jako SPAM
IP: 160.218.87.–
Reklama
Reklama
z
~ Anonymní uživatel
268 příspěvků
31. 10. 2014   #2
-
0
-

To asi nebude záležitost pro regex.

Ale můžeš to teda udělat tak, že nejdřív vytáhneš ta data a až v nich pak nahradíš tu hodnotu:

String s = "A-VALUE\n<DATA>\nB-VALUE\nC-VALUE\n</DATA>\nD-VALUE\n<DATA>\nE-VALUE\nF-VALUE\n</DATA>\nG-VALUE";
StringBuffer sb = new StringBuffer();

Matcher m = Pattern.compile("<DATA>[^<]*</DATA>").matcher(s);
while (m.find()) {
	m.appendReplacement(sb, m.group().replaceAll("-VALUE\n", "-NEWVALUE\n"));
}
m.appendTail(sb);

String x = sb.toString();

System.out.println(s);
System.out.println("====");
System.out.println(x);
A-VALUE
<DATA>
B-VALUE
C-VALUE
</DATA>
D-VALUE
<DATA>
E-VALUE
F-VALUE
</DATA>
G-VALUE
====
A-VALUE
<DATA>
B-NEWVALUE
C-NEWVALUE
</DATA>
D-VALUE
<DATA>
E-NEWVALUE
F-NEWVALUE
</DATA>
G-VALUE
Nahlásit jako SPAM
IP: 78.156.159.–
RomanM
~ Anonymní uživatel
2 příspěvky
31. 10. 2014   #3
-
0
-

#2 z
Super, funguje, děkuji.

Nahlásit jako SPAM
IP: 160.218.87.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 38 hostů

Podobná vlákna

Regulární výrazy — založil polonium

Regulární výrazy — založil Sony

Regularni vyrazy — založil Vyhulman

Regulární výrazy — založil Nikishek

Regulární výrazy — založil Míša

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý