我有一个字符串"Hello" hello
(包括引号),我只想获得带引号但没有引号的Hello
我尝试使用正则表达式,但它从未找到引用我猜测
String s = new String("string");
Pattern p = Pattern.compile("\"([^\"])\"");
Matcher m = p.matcher(n);
while (m.find()) {
s = m.group(1);
}
while循环永远不会被执行,建议?
答案 0 :(得分:5)
- 移动括号内的星形以进行正确的分组---
"\"([^\"]*)\""
使用代码
成功测试import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String s = new String("\"Hello\" hello");
Pattern p = Pattern.compile("\"([^\"]*)\"");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group(1));
}
}
}
产生了预期的输出
Hello
- 原帖如下 -
您不匹配任何内容,因为您的正则表达式只写入匹配引用的一个字符串。
"\"([^\"])*\""
更接近您的需求。注意星号,它表示前面表达式中的零个或多个。在这种情况下,前面的表达式是“任何缺少双引号的东西”。
答案 1 :(得分:4)
如果你想找到任何字符串,我建议你尝试一个带引号的字符串。 ;)
尝试
String s = "start \"string\" end";
或
String s = "\"Hello\" hello";
答案 2 :(得分:0)
在这种情况下,您只需使用indexOf("\"")
。