gpt4 book ai didi

java - 使用正则表达式从给定的字符串值中提取子字符串

转载 作者:行者123 更新时间:2023-12-02 09:11:29 25 4
gpt4 key购买 nike

我有一个要求,需要匹配字符串,然后从该字符串中提取更多值

我将在请求中收到一个 header ,其值将是来自 ssl 证书的 DN 名称。这里需要匹配 header 中的特定字符串 1.2.3.47 并提取剩余文本。

传递给方法的示例字符串:O=ABC Bank Plc/1.2.3.47=ABC12-PQR-121878、CN=7ltM2wQ3bqlDJdBEURGAMq、L=印度、C=印度、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-9](?:\\.[0-9]+)+=([^,]+)
  • / 匹配 /
  • [0-9]+ 匹配 1+ 数字 0-9
  • (?: 非捕获组
    • \\.[0-9]+ 匹配 . 和 1+ 数字 0-9
  • )+ 关闭非捕获组并重复 1+ 次
  • = 匹配 =
  • ([^,]+) 捕获组 1,匹配 1+ 次除 之外的任何字符,

Regex demo | Java demo

例如

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]+)+=([^,]+)

Regex demo

关于java - 使用正则表达式从给定的字符串值中提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59391156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com