正则表达式以匹配Java中@之间的字符串
我使用Java模式编译将子字符串与特定模式匹配,并将其添加到列表中 我希望正则表达式与以下场景匹配正则表达式以匹配Java中@之间的字符串,java,regex,Java,Regex,我使用Java模式编译将子字符串与特定模式匹配,并将其添加到列表中 我希望正则表达式与以下场景匹配 字符串以开头和结尾(例如。@@foo、bar、bla@@@1) 字符串以“@”开头,以“@”结尾 字符串以Hello“@@1开头,以@@”结尾,World 字符串以Hello“@@1开头,以@@@2结尾,//这是一条注释 目前的代码是:- List<String> matches = new ArrayList<String>(); Matcher m =
List<String> matches = new ArrayList<String>();
Matcher m = Pattern.compile("@@([^@@]*)@@")
.matcher(content);
System.out.println(m.find());
while (m.find()) {
matches.add(m.group());
}
List matches=new ArrayList();
Matcher m=Pattern.compile(“@([^@]*)@”)
.matcher(内容);
System.out.println(m.find());
while(m.find()){
匹配。添加(m.group());
}
我的内容是'var bookSrc=“@@book:URL@@@”,var books\u count:@@count@@@var active=true'
上面的代码只匹配@之间的字符串,实际结果是[@@count@],我希望结果是[@@book:URL@,@@count@]
如果有任何帮助,我应该如何修改我的模式以适应上述所有场景。在执行循环之前,您可以调用
Matcher.find
一次。因此,将跳过第一个匹配。如果你移除
System.out.println(m.find());
它按预期工作。如果循环后有匹配项,您仍然可以测试:
System.out.println(!matches.isEmpty());
在执行循环之前,调用
Matcher.find
一次。因此,将跳过第一个匹配。如果你移除
System.out.println(m.find());
它按预期工作。如果循环后有匹配项,您仍然可以测试:
System.out.println(!matches.isEmpty());
在执行循环之前,调用
Matcher.find
一次。因此,将跳过第一个匹配。如果你移除
System.out.println(m.find());
它按预期工作。如果循环后有匹配项,您仍然可以测试:
System.out.println(!matches.isEmpty());
在执行循环之前,调用
Matcher.find
一次。因此,将跳过第一个匹配。如果你移除
System.out.println(m.find());
它按预期工作。如果循环后有匹配项,您仍然可以测试:
System.out.println(!matches.isEmpty());
你正在“吃”一个
m.group()
是因为m.find()
的sysout,你不这么认为吗?[^@]
没有做你想做的事。它匹配除@
之外的任何单个字符。使用模式。编译(“@(.*?@”)
(问号使。*不贪婪,因此它不会消耗后面的两个@)。你正在“吃”一个m.group()
,因为m.find()
中的sysout。你不这么认为吗?[^@]
没有做你想做的事情。它匹配除@
之外的任何单个字符。使用模式。编译(“@(.*?@”)
(问号使。*不贪婪,因此它不会消耗后面的两个@)。你正在“吃”一个m.group()
,因为m.find()
中的sysout。你不这么认为吗?[^@]
没有做你想做的事情。它匹配除@
之外的任何单个字符。使用模式。编译(“@(.*?@”)
(问号使。*不贪婪,因此它不会消耗后面的两个@)。你正在“吃”一个m.group()
,因为m.find()
中的sysout。你不这么认为吗?[^@]
没有做你想做的事情。它匹配除@
之外的任何单个字符。使用模式。编译(“@(.*?@”)
(问号使.*不贪婪,因此它不会消耗后面的两个@)