试图提取用双括号括起来的字符串。例如[[这是一个令牌]]应该匹配。为了使事情更优雅,应该有一个转义序列,这样像\ [[这个转义符\]]的双括号内容就不会匹配。Java中的RegEx无法正常工作
用“组1”提取标记的模式[^\\\\]([\\[]{2}.+[^\\\\][\\]]{2})
接近,但有些情况下它不起作用。问题似乎是,第一个“不”的语句被评估为“除反斜线外的任何内容”。问题是,“任何事物”都不包括“无”。那么,什么使这种模式匹配“没有任何或任何字符比反斜杠”?
这里是一个单元测试来展示所需的行为:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import junit.framework.TestCase;
public class RegexSpike extends TestCase {
private String regex;
private Pattern pattern;
private Matcher matcher;
@Override
protected void setUp() throws Exception {
super.setUp();
regex = "[^\\\\]([\\[]{2}.+[^\\\\][\\]]{2})";
pattern = Pattern.compile(regex);
}
private String runRegex(String testString) {
matcher = pattern.matcher(testString);
return matcher.find() ? matcher.group(1) : "NOT FOUND";
}
public void testBeginsWithTag_Passes() {
assertEquals("[[should work]]", runRegex("[[should work]]"));
}
public void testBeginsWithSpaces_Passes() {
assertEquals("[[should work]]", runRegex(" [[should work]]"));
}
public void testBeginsWithChars_Passes() {
assertEquals("[[should work]]", runRegex("anything here[[should
work]]"));
}
public void testEndsWithChars_Passes() {
assertEquals("[[should work]]", runRegex("[[should
work]]with anything here"));
}
public void testBeginsAndEndsWithChars_Passes() {
assertEquals("[[should work]]", runRegex("anything here[[should
work]]and anything here"));
}
public void testFirstBracketsEscaped_Fails() {
assertEquals("NOT FOUND", runRegex("\\[[should NOT work]]"));
}
public void testSingleBrackets_Fails() {
assertEquals("NOT FOUND", runRegex("[should NOT work]"));
}
public void testSecondBracketsEscaped_Fails() {
assertEquals("NOT FOUND", runRegex("[[should NOT work\\]]"));
}
}
什么也不做的意思是NULL或空白? – northpole 2009-06-25 16:59:20