Regex 如何解析正则表达式

Regex 如何解析正则表达式,regex,Regex,有人知道如何解析下面的字符串来获得这两个字符串:[Test1][Test2]和[Test3][Test4] 字符串: Hello[Test1][Test2]world][Test3][Test4]这里是test]。 试试这个:(\[[a-zA-Z0-9]+\]){2}你必须做一个循环来获得一个动态的匹配数(我想你想要得到) 我使用了模式*?((?:\[.*?\])+)(.*)。第一个匹配组将找到所需的字符串,第二个匹配组将始终找到“其余”字符串,您将不得不再次解析它们 构造“(?:…)”是一个非

有人知道如何解析下面的字符串来获得这两个字符串:
[Test1][Test2]
[Test3][Test4]

字符串:

Hello[Test1][Test2]world][Test3][Test4]这里是test]。


试试这个:
(\[[a-zA-Z0-9]+\]){2}

你必须做一个循环来获得一个动态的匹配数(我想你想要得到)

我使用了模式
*?((?:\[.*?\])+)(.*)
。第一个匹配组将找到所需的字符串,第二个匹配组将始终找到“其余”字符串,您将不得不再次解析它们

构造“(?:…)”是一个非捕获组,它不会生成匹配组(在Java正则表达式语法中)

下面是一个简短的Java示例:

public static void main(String[] args) {

    // define regular expression
    Pattern pattern = Pattern.compile(".*?((?:\\[.*?\\])+)(.*)");

    // iterate for each match
    Matcher matcher = pattern.matcher("Hello [Test1][Test2] world] [Test3][Test4] this is test].");
    while (matcher.matches()) {
        String text = matcher.replaceFirst(matcher.group(2));
        System.out.println("Found " + matcher.group(1));
        matcher = pattern.matcher(text);
    }
}
这将产生:

Found [Test1][Test2]
Found [Test3][Test4]

抱歉,如果这有点复杂,请告诉我/我们您是否需要一个更简单的示例…

使用
perl
flavor regex:

m/\[\S+/g

测试:

script.pl的内容

use warnings;
use strict;

## Read all data after __DATA__ filehandle.
while ( <DATA> ) { 

    ## Save in array '@matches' any characters from an opening 
    ## square bracket until a blank found.
    ## 'g' flag means to do it many times in same line.
    my @matches = m/\[\S+/g;

    ## Print to output. Each match in a line.
    printf qq[%s\n], join qq[\n], @matches;
}

__DATA__
Hello [Test1][Test2] world] [Test3][Test4] this is test].
结果:

[Test1][Test2]
[Test3][Test4]

谢谢你的回复。您的变体在这种情况下工作得非常好。但我想得到更普遍的方法。如何更普遍?kdzwinel的答案适用于所述示例。如果您需要处理更复杂的输入数据,您应该改进这个问题,stackoverflow用户不是大法师。请帮助我们帮助你。
[Test1][Test2]
[Test3][Test4]