Java 如何使用正则表达式获取特定数据?

Java 如何使用正则表达式获取特定数据?,java,regex,Java,Regex,我有以下数据的输入流: --------------------------------------------- manil@manil-ubvm:~$db2level DB21085I实例“manil”使用“64”位,DB2代码版本“SQL10010”使用 级别标识符“02001010E”。 信息性标记有“DB2V10.1.0.0”、“s120403”、“LINUXAMD64101”和Fix 包装“0”。 产品安装在“/home/manil/sqllib”中。 ---------------

我有以下数据的输入流:

---------------------------------------------
manil@manil-ubvm:~$db2level
DB21085I实例“manil”使用“64”位,DB2代码版本“SQL10010”使用
级别标识符“02001010E”。
信息性标记有“DB2V10.1.0.0”、“s120403”、“LINUXAMD64101”和Fix
包装“0”。
产品安装在“/home/manil/sqllib”中。
---------------------------------------------
从上面看,我需要
v10.1.0.0
存储在字符串变量中


如何使用java正则表达式实现这一点?

这里不需要正则表达式

只用


String.contain()

import java.util.regex.*;

    public class RTest {

            public static void main(String [] args) {
                    String raw_data = "asdkgjasdbf984 sdkjfashfiu 4qwsadkfjnv w98sa-asdf08gywbfsd v1231.123.12.11.1 fkjsdfn9823isd";
                    Pattern version_find = Pattern.compile("v[\\d+\\.?]+");
                    Pattern directory_find = Pattern.compile("[\\/[^\\/]+]+");
                    Matcher version_finder = version_find.matcher(raw_data);
                    while(version_finder.find()) {
                          System.out.println(version_finder.group());
                    }
            }
    }
输出为:

v1231.123.12.11.1
/isd/asdasd2903 ajshdaq09r34/adsj 38/

如果你是一名程序员,你真的需要深入理解正则表达式。它们是必需品之一。一开始它们很难,但一旦你“破解”它们,你就不会忘记它。比如骑自行车

这将满足您的需要:

String version = yourLine.replaceAll(".*(v\\d+([.]\\d+){3}).*", "$1")

我们需要更多的规则:字符串
v10.1.0.0
可以通过多种方式访问。它前面会有
DB2
,并且包含在双引号之间吗?它是否总是相同的格式(即
v
+4个用点分隔的数字)?你已经试过了吗?是的,它总是相同的格式。我的其他问题呢?我不知道“v”后面会有什么确切的值。我能够到达第四行,即“信息标记是”DB2V10.1.0.0“、”s120403“、”LINUXAMD64101“和”修复“。但是我需要v后面的任何数字,比如vxx.x.x.xyou可以使用contain()搜索DB2,然后可以使用v作为子字符串(),直到\“DB2不固定,它可以更改。但是格式(即v+4个数字,由点分隔。如果我想找到“/home/manil/sqllib“frm相同的输入流,wht将是要编译的正则表达式?我也更新了我的答案以反映这一点。但请看重点