Wyrażenie regularne do wyszukiwania nawiasów

0

Hej!
Mógłby ktoś zapodać regexa do wyszukiwania zawartości nawiasów w wyrażeniu np.
asdd{bbbbb}ggrgrgg{dfsfd{hh}effff}fefe.
Powinien wyświetlić bbbbb i hh , a nawiasy poprzedzane backslashem traktować jako normalne znaki.Z góry dzięki,pozdrawiam:)

0

Jeżeli założymy że wewnątrz tych nawiasów nie może być { lub } to:

[^\\]*{([^{}]+)[^\\]*}

Ale jak już mogę być wewnątrz to ciężko będzie :/

EDIT: Tak powinno być chyba dobrze:
[\]?{(((\{)(\})[{}]+(\{)(\}))+)[^\]?}
Pierwsza podsekcja to będzie twój string :)

0

Dzięki wielkie za odzew ale się wywala na niedomkniętym znaku:P.Odpalam to tym kodem:

          public static void getAttributesFromParentheses(String value) {
        
        	Pattern p = Pattern.compile("[^\\]?{(((\\{)*(\\})*[^{}]+(\\{)*(\\})*)+)[^\\]?}");
		Matcher m = p.matcher(value); 
		while(m.find()) {	
			System.out.println(value.substring(m.start()+1,m.end()-1));
	    }
	        
	}
0

domknięcia sa bledem tego "[\]" w javie trzeba jeszcze pamiętać o tym ze kompilator dodatkowo traktuje znak \ po Swojemu :) prawidłowo powinno być "[\\]" masz gdzieś jeszcze błędy w wyrażeniu np "{}"

http://java.heap.pl/java/regexp_java.pdf

0

Kurczę ciągle mi sie wywala na tych nawiasach klamrowych które są zdefiniowane wewnątrz nawiasów:) np
{MyValue{123}abc} powinien zwrócic MyValue{123}abc.Mógłby ktoś wspomóc bo już naprawdę nie mam pomysłu...

0
String temp = "\\{MyValue\\{123\\}abc\\}";
0

Chodziło mi o regexa który wyszuka wyrażenia w nawiasach klamrowych(tak jak napisałem w 1 poście),ale w przypadku znaku \ przed { lub } ma to traktować jako zwykły znak czyli np.
do{Identif{ier}abc}mnb{name}prt powinien wyrzucić:
{Identif{ier}abc} i {name}.Nie chcę żeby łykał tych nawiasów przed którymi jest backslash.

0

Tak jak niżej powinno być ok:
[^\\{]?{(((\\[{}])*[^{}\\]*)+)[^\\}]?}

0

Kurcze,nie działa zbyt dobrze ten regex,ja próbowałem już z kilkoma,ostatnio:
Pattern p = Pattern.compile("(?<!\\\\)\\{(((\\\\\\{)*(\\\\\\})*[^{}]*(\\\\\\{)*(\\\\\\})*)*)[^\\\\]?\\}");

i szło dobrze ale jak brakuje domknięcia nawiasu } w expressionie to stoi na Matcher.find() .Ma ktoś jakiś pomysł na tego regexa??(Wyłapywanie zawartości nawiasów {} z tym,że jeśli przed nawiasem stoi \ to powinien traktować go nie jako nawias tylko zwykłą wartość.Czyli:

1)aaa{Identifier}afs powienien zwrócić {Identifier}
2)aaa{Ident}ifier}afs powienien zwrócić {Ident}ifier}
3)aaa{Ident{ifier}afs powienien zwrócić {Ident{ifier}
4)aaa{Identi{fier}afs powienien zwrócić {fier}
5)aa{a{Identifier}afs powienien zwrócić {Identifier}
6)aaa{}asdfafs powieniem zwrócić {}
7)aaa{Identifierafs nie powienien nic zwrócić

itd.

Z góry dzięki za wszelką pomoc:)

0

W przykladzie 4. jest blad. Przykladowy regex moze wygladac tak:

//negative look-behind
String regex = "(?<!\\\\)\\{.*?(?<!\\\\)\\}";
0

Dlaczego jest błąd??

0

Wygląda że działa,dzięki chłopie :-) [browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1