Der PHP-Editor Banana stellt Ihnen eine Methode vor, mit der Sie in PHP den Wert aus einer Zeichenfolge mit verschachtelten Klammern extrahieren können. Während der Entwicklung stoßen wir manchmal auf Situationen, in denen wir bestimmte Werte aus einer komplexen Zeichenfolge extrahieren müssen und diese Werte möglicherweise in mehreren Klammern verschachtelt sind. In diesem Artikel erfahren Sie, wie Sie die String-Verarbeitungsfunktionen, Rekursion und regulären Ausdrücke von PHP verwenden, um dieses Problem zu lösen. Unabhängig davon, ob Sie Anfänger oder erfahrener Entwickler sind, erhalten Sie in diesem Artikel praktische Tipps und Beispielcode, mit denen Sie diese Art von Aufgabe problemlos bewältigen können.
Gegeben eine Eingabezeichenfolge, zum Beispiel:
AB[C[DA,BF,GAL],DB[NX,AQQ,AAN,B],F[H[GG,BAND]]]
String-Array zurückgeben:
["ABCDA", "ABCBF", "ABCGAL", "ABDBNX", "ABDBAQQ", "ABDBAAN", "ABDBB", "ABFHGG"]
Ich konnte eine Teillösung schreiben, aber wenn es mehrere gibt [children]
ist es schwierig, den Überblick über den übergeordneten Knoten zu behalten.
Noch eine Testzeichenfolge: ZHLADAOR[R[G[45D[COI,EMA],Q5D[COI,EMA],U5D[COI,EMA],Y5D[COI,EMA]],HE5D[COI,EMA]], SG[A5D[COI,EMA],E5D[COI,EMA],I5D[COI,EMA]]]
<code>func expandNestedString(str string) []string { var parts []string var currentPart []rune var openBrackets int var level int var bitsBeforeComma int var prevBitsBeforeComma int for _, char := range str { if char == '[' { openBrackets++ level++ prevBitsBeforeComma = bitsBeforeComma bitsBeforeComma = 0 } else if char == ']' { openBrackets-- if openBrackets == 0 { if level == 0 && len(currentPart) > 0 { parts = append(parts, string(currentPart)) } currentPart = []rune{} level-- } else { parts = append(parts, string(currentPart)) currentPart = currentPart[:len(currentPart)-(bitsBeforeComma+prevBitsBeforeComma)] bitsBeforeComma = 0 } } else if char == ',' { parts = append(parts, string(currentPart)) currentPart = currentPart[:len(currentPart)-bitsBeforeComma] bitsBeforeComma = 0 } else { currentPart = append(currentPart, char) bitsBeforeComma++ } } if len(currentPart) > 0 { parts = append(parts, string(currentPart)) } return parts } </code>
Oftmals können diese Probleme, die scheinbar das Ausbalancieren von Klammern oder das Verfolgen früherer Zeichenmuster erfordern, gut mit Rekursion gelöst werden. Das ist eine effektive Lösung
func expand(s []rune, idx int) ([][]rune, int) { var prefix []rune var result [][]rune for ; idx < len(s); idx++ { switch s[idx] { case '[': runes, lastIdx := expand(s, idx+1) for _, r := range runes { result = append(result, append(prefix, r...)) } idx = lastIdx prefix = []rune{} case ']': if len(prefix) > 0 { result = append(result, prefix) } return result, idx case ',': if len(prefix) > 0 { result = append(result, prefix) prefix = []rune{} } default: prefix = append(prefix, s[idx]) } } if len(prefix) > 0 { result = append(result, prefix) } return result, idx } func expandNestedString(s string) []string { runes, _ := expand([]rune(s), 0) var result []string for _, r := range runes { result = append(result, string(r)) } return result }
Das obige ist der detaillierte Inhalt vonExtrahieren Sie den Wert aus der Zeichenfolge mit verschachtelten Klammern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!