Table of Contents
Question content
Solution
Home Backend Development Golang Extract value from string with nested brackets

Extract value from string with nested brackets

Feb 08, 2024 pm 11:54 PM
string array

Extract value from string with nested brackets

php editor Banana will introduce you to a method to extract the value from a string with nested brackets in PHP. During development, sometimes we encounter situations where we need to extract specific values ​​from a complex string, and these values ​​may be nested in multiple parentheses. This article will show you how to use PHP's string processing functions, recursion and regular expressions to solve this problem. Whether you are a beginner or an experienced developer, this article will provide you with practical tips and sample code to help you tackle this type of task with ease.

Question content


Given an input string, for example:

AB[C[DA,BF,GAL],DB[NX,AQQ,AAN,B],F[H[GG,BAND]]]

Return string array:

["ABCDA", "ABCBF", "ABCGAL", "ABDBNX", "ABDBAQQ", "ABDBAAN", "ABDBB", "ABFHGG"]
Copy after login

I was able to write a partial solution, but if there are multiple [children] it becomes difficult to keep track of the parent node.

Another test string: 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>
Copy after login



Solution


Often these problems that seem to require balancing parentheses or keeping track of previous character patterns can be solved nicely with recursion. This is a valid solution

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
}
Copy after login

Demo

The above is the detailed content of Extract value from string with nested brackets. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1675
14
PHP Tutorial
1278
29
C# Tutorial
1257
24
How to use split() function in oracle How to use split() function in oracle May 07, 2024 pm 01:06 PM

The SPLIT() function splits a string into an array by a specified delimiter, returning a string array where each element is a delimiter-separated portion of the original string. Usage includes: splitting a comma-separated list of values ​​into an array, extracting filenames from paths, and splitting email addresses into usernames and domains.

How to sort strings in java How to sort strings in java Apr 02, 2024 am 02:18 AM

Ways to sort strings in Java: Use the Arrays.sort() method to sort an array of strings in ascending order. Use the Collections.sort() method to sort a list of strings in ascending order. Use the Comparator interface for custom sorting of strings.

What does \0 mean in c language What does \0 mean in c language Apr 27, 2024 pm 10:54 PM

In C language, \0 is the end mark of a string, called the null character or terminator. Since strings are stored in memory as byte arrays, the compiler recognizes the end of the string via \0, ensuring that strings are handled correctly. \0 How it works: The compiler stops reading characters when it encounters \0, and subsequent characters are ignored. \0 itself does not occupy storage space. Benefits include reliable string handling, improved efficiency (no need to scan the entire array to find the end), and ease of comparison and manipulation.

What does args mean in java What does args mean in java Apr 25, 2024 pm 10:15 PM

args stands for command line arguments in Java and is an array of strings containing the list of arguments passed to the program when it is started. It is only available in the main method, and its default value is an empty array, with each parameter accessible by index. args is used to receive and process command line arguments to configure or provide input data when a program starts.

What does args mean in java What does args mean in java May 07, 2024 am 02:24 AM

args is a special parameter array of the main method in Java, used to obtain a string array of command line parameters or external input. By accessing the args array, the program can read these arguments and process them as needed.

Application of artificial intelligence technology in PHP functions Application of artificial intelligence technology in PHP functions May 01, 2024 pm 01:15 PM

AI technology has been combined with PHP functions to enhance the functionality of the application. Specific AI applications include: using machine learning algorithms to classify text, such as Naive Bayes. Perform in-depth text analysis using natural language processing techniques such as word segmentation and stemming.

How to sort Chinese characters in C language environment? How to sort Chinese characters in C language environment? Feb 18, 2024 pm 02:10 PM

How to implement Chinese character sorting function in C language programming software? In modern society, the Chinese character sorting function is one of the essential functions in many software. Whether in word processing software, search engines or database systems, Chinese characters need to be sorted to better display and process Chinese text data. In C language programming, how to implement the Chinese character sorting function? One method is briefly introduced below. First of all, in order to implement the Chinese character sorting function in C language, we need to use the string comparison function. Ran

What impact do C++ functions have on program performance? What impact do C++ functions have on program performance? Apr 12, 2024 am 09:39 AM

The impact of functions on C++ program performance includes function call overhead, local variable and object allocation overhead: Function call overhead: including stack frame allocation, parameter transfer and control transfer, which has a significant impact on small functions. Local variable and object allocation overhead: A large number of local variable or object creation and destruction can cause stack overflow and performance degradation.

See all articles