是否有人知道如何解析下面的字符串以获取这两个字符串:[Test1][Test2]
和[Test3][Test4]
。
STRING:
Hello [Test1][Test2] world] [Test3][Test4] this is test].
答案 0 :(得分:1)
试试这个:(\[[a-zA-Z0-9]+\]){2}
。
答案 1 :(得分:1)
你必须做一个循环来获得动态数量的匹配(我想你想得到)。
我使用了模式.*?((?:\[.*?\])+)(.*)
。第一个匹配组将找到所需的字符串,第二个匹配组将始终找到“其余”,您将不得不再次解析。
构造“(?:...)”是一个非捕获组,它不会产生匹配组(使用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]
对不起,如果这有点复杂,请让我/我们知道你是否需要一个更简单的例子...
答案 2 :(得分:0)
使用perl
风格正则表达式:
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].
运行脚本:
perl script.pl
结果:
[Test1][Test2]
[Test3][Test4]