У меня есть следующая строка:регулярного выражения для вложенных структур
bla {{bla {{bla bla {{afsaasg}} }} blabla}} {{bla bla}} bla
Я хотел бы, чтобы соответствовать
{{bla {{bla bla {{afsaasg}} }} blabla}}
с регулярным выражением.
но мой регулярных выражений
{{(.*?)}}
матчи
{{bla {{bla bla}}
кто может помочь?
Дополнительная информация: Я ожидаю, что одновременно будет не более двух скобок.
Наконец-то я решил это с помощью собственной фукции Java. Perhabs это поможет кому-то:
public static ArrayList<String> getRecursivePattern(String sText, String sBegin, String sEnd) {
ArrayList<String> alReturn = new ArrayList<String>();
boolean ok1 = true;
boolean ok2 = true;
int iStartCount = 0;
int iEndCount = 0;
int iStartSearching = 0;
while (ok1) {
int iAnfang = sText.indexOf(sBegin, iStartSearching);
ok2 = true;
if (iAnfang > -1) {
while (ok2) {
int iStartCharacter = sText.indexOf(sBegin, iStartSearching);
int iEndCharacter = sText.indexOf(sEnd, iStartSearching);
if (iEndCharacter == -1) {
// Nothing found . stop
ok2 = false;
ok1 = false;
} else if (iStartCharacter < iEndCharacter && iStartCharacter != -1) {
// found startpattern
iStartCount = iStartCount + 1;
iStartSearching = iStartCharacter + sBegin.length();
} else if (iStartCharacter > iEndCharacter && iEndCharacter != -1 || (iStartCharacter == -1 && iEndCharacter != -1)) {
iEndCount = iEndCount + 1;
iStartSearching = iEndCharacter + sEnd.length();
} else {
if (iStartCharacter < 0) {
// No End found . stop
ok2 = false;
}
}
if (iEndCount == iStartCount) {
// found the pattern
ok2 = false;
// cut
int iEnde = iStartSearching;// +sEnd.length();
String sReturn = sText.substring(iAnfang, iEnde);
alReturn.add(sReturn);
}
}
} else {
ok1 = false;
}
}
return alReturn;
}
Я называю это:
ArrayList<String> alTest=getRecursivePattern("This {{ is a {{Test}} bla }}","{{","}}");
System.out.println(" sTest : " + alTest.get(0));
Какой язык вы используете? – anubhava
Я использую это в Java –
Вы хотите, чтобы регулярное выражение соответствовало _only_ вложенным структурам? –