我从数组列表中获取一个字符串:
array.get(0).toString()
Run Code Online (Sandbox Code Playgroud)
给TITLE ="blabla"
我想要字符串blabla,所以我试试这个:
Pattern p = Pattern.compile("(\".*\")");
Matcher m = p.matcher(array.get(0).toString());
System.out.println("Title : " + m.group(0));
Run Code Online (Sandbox Code Playgroud)
它不起作用: java.lang.IllegalStateException: No match found
我也尝试:
Pattern p = Pattern.compile("\".*\"");
Pattern p = Pattern.compile("\".*\"");
Pattern p = Pattern.compile("\\\".*\\\"");
Run Code Online (Sandbox Code Playgroud)
在我的程序中没有任何匹配,但所有模式都在http://www.fileformat.info/tool/regex.htm上工作
任何的想法?提前致谢.
几点:
Javadoc for Matcher#group声明:
IllegalStateException - 如果尚未尝试匹配,或者上一个匹配操作失败
也就是说,在使用组之前,必须首先使用m.matches(以匹配整个序列),或m.find(以匹配子序列).
其次,你真的想要m.group(1),因为m.group(0)是整个模式.
实际上,这不是很重要,因为有问题的正则表达式以捕获括号开头和结尾,因此group(0)与group(1)是相同的字符串,但是如果你的正则表达式看起来像是这样: "TITLE = (\".*\")"
示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Test;
@SuppressWarnings("serial")
public class MatcherTest {
@Test(expected = IllegalStateException.class)
public void testIllegalState() {
List<String> array = new ArrayList<String>() {{ add("Title: \"blah\""); }};
Pattern p = Pattern.compile("(\".*\")");
Matcher m = p.matcher(array.get(0).toString());
System.out.println("Title : " + m.group(0));
}
@Test
public void testLegal() {
List<String> array = new ArrayList<String>() {{ add("Title: \"blah\""); }};
Pattern p = Pattern.compile("(\".*\")");
Matcher m = p.matcher(array.get(0).toString());
if (m.find()) {
System.out.println("Title : " + m.group(1));
}
}
}
Run Code Online (Sandbox Code Playgroud)