Java 正则表达式匹配器未给出预期结果。号码不匹配
我不明白为什么第二组只给我0。我预计3000英镑。并给我指出一个我能更好理解的资源Java 正则表达式匹配器未给出预期结果。号码不匹配,java,regex,Java,Regex,我不明白为什么第二组只给我0。我预计3000英镑。并给我指出一个我能更好理解的资源 import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public static void main( String args[] ) { // String to be scanned to find the pattern. String line
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches {
public static void main( String args[] ) {
// String to be scanned to find the pattern.
String line = "This order was placed for QT3000! OK?";
String pattern = "(.*)(\\d+)(.*)";
// Create a Pattern object
Pattern r = Pattern.compile(pattern);
// Now create matcher object.
Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );//?
System.out.println("Found value: " + m.group(3) );
}else {
System.out.println("NO MATCH");
}
}
}
精确模式,在
\d
模式之前添加QT
,或使用*?
而不是第一个*
以获得尽可能少的字符
String pattern = "(.*QT)(\\d+)(.*)";
或
行。见a
(.*QT)(\\d+)(.*)
将尽可能多地匹配并捕获第1组中除换行符以外的任何0+字符,直到最后出现的QT
(后面是后续子模式),然后将匹配并捕获第2组中的1+个数字,然后将匹配并捕获第3组中的其余行
备选模式中的*?
将匹配并捕获第1组中除换行符以外的任何0+字符,尽可能少,直到第一个1位数或更多位数的块
您也可以使用更简单的模式,如
String pattern=“QT(\\d+)
获取QT
之后的所有数字,结果将在第1组中(数字前后没有文本)。量词将尝试匹配尽可能多的数字,因为它是贪婪的
量词。
通过将其更改为*?
然后,您的正则表达式将变成:
(.*?)(\d+)(.*)
您将在第二组中匹配3000
这里是您需要使第一个
*
量词非贪婪。将其更改为*?
感谢Wiktor的支持。如果字符串是“ABCD1234DEFG”,而我只想提取1234,该怎么办。string pattern=“\\d+”
如果要使用模式#find()
。或者只是s=s.replaceAll(“\\D+”,”)代码>,请参阅。感谢Seblor的回答。“?”在这个正则表达式中实际上是做什么的?据我所知,它用于匹配0或1个事件。我想知道这个正则表达式的意义是什么。我使*
量词不贪婪(懒惰)。它对+
量词也同样有效。非贪婪(懒惰)是什么意思?与其尝试尽可能多地匹配,il将在正则表达式的其余部分能够匹配时立即停止匹配。
(.*?)(\d+)(.*)