我有一个需要匹配的字符串,然后从该字符串中提取更多值的要求
我将在请求中收到标头,该标头的值将是ssl证书中的DN名称。这里需要匹配标题中的特定字符串1.2.3.47并提取剩余的文本。
传递给方法的样本字符串: O = ABC Bank Plc / 1.2.3.47 = ABC12-PQR-121878,CN = 7ltM2wQ3bqlDJdBEURGAMq,L = INDIA,C = INDIA,E=xyz@gmail.com
这是我的代码:
private String extractDN(String dnHeader) {
if(!ValidatorUtil.isEmpty(dnHeader)){
String tokens[]=dnHeader.split(",");
if(tokens[0].contains("1.2.3.47")){
int index=tokens[0].lastIndexOf("1.2.3.47");
String id=tokens[0].substring(index+9);
System.out.println(id);
}
}
return id;
}
这里可以使用正则表达式模式来匹配和提取值吗?有没有更好的方法来实现这一目标?请帮忙。
答案 0 :(得分:1)
如果要使用模式,并且知道该值始终以正斜杠开头,并且如果后面跟一个或多个数字,则用点号和等号隔开,则可以使用捕获组:
>/[0-9](?:\\.[0-9]+)+=([^,]+)
/
匹配/
[0-9]+
匹配1+数字0-9 (?:
非捕获组
\\.[0-9]+
匹配.
和1个以上的数字0-9 )+
关闭非捕获组并重复1次以上=
匹配=
([^,]+)
捕获组1,匹配除,
之外的任何字符的1+倍例如
final String regex = "/[0-9]+(?:\\.[0-9]+)+=([^,]+)";
final String string = "O=ABC Bank Plc/1.2.3.47=ABC12-PQR-121878, CN=7ltM2wQ3bqlDJdBEURGAMq, L=INDIA, C=INDIA, E=xyz@gmail.com";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
输出
ABC12-PQR-121878
如果您想要更精确的匹配,还可以指定模式的开头:
\\bO=\\w+(?:\\h+\\w+)*/[0-9]+(?:\\.[0-9]+)+=([^,]+)