String myString = "OID.1.2.840.113549.1.9.2=Responsable: Fernando Martínez Coss, L=Cuauhtemoc, ST=Distrito Federal, C=MX, OID.2.5.4.17=06300, STREET="Av. Hidalgo 77, Col. Guerrero", EMAILADDRESS=acods@sat.gob.mx, O=Servicio de Administración Tributaria, CN=A.C. del Servicio de Administración Tributaria";
我有那个,原谅西班牙语。如何在“CN =”之后获得所有字符CN属性可能不会始终位于字符串的末尾,并且可能在其后面有任何字符。
在这种特殊情况下,CN =很方便地落在字符串的末尾,但它可能以逗号或其他字符结尾,而不是字母或数字。
像:
CN=A.C. del Servicio de Administración Tributaria/email CN=A.C. del Servicio de Administración Tributaria, Somethings.
我只想要斜杠和逗号之前以及等于之后的值。
答案 0 :(得分:1)
您可以假设“CN”元素将始终位于字符串的末尾或后跟另一个“X = Y”序列,因此您可以尝试这样:
Pattern p = Pattern.compile("CN=(.*?)($|, [A-Z]+)=.*");
Matcher m = p.matcher(myString);
if (m.find()) {
// Now m.group(1) contains the value associated with "CN".
}
答案 1 :(得分:1)
String myString = "OID.1.2.840.113549.1.9.2=Responsable: Fernando Martínez Coss, L=Cuauhtemoc, ST=Distrito Federal, C=MX, OID.2.5.4.17=06300, STREET="Av. Hidalgo 77, Col. Guerrero", EMAILADDRESS=acods@sat.gob.mx, O=Servicio de Administración Tributaria, CN=A.C. del Servicio de Administración Tributaria";
int indexCn = myString.indexOf("CN");
int indexComma = myString(",", indexCn );
return indexComma == -1 ? myString.substring( indexCn ) : myString.substring( indexCn, indexComma - indexCn );
您需要处理两种情况
答案 2 :(得分:1)
String myString = "OID.1.2.840.113549.1.9.2=Responsable: Fernando Martínez Coss, L=Cuauhtemoc, ST=Distrito Federal, C=MX, OID.2.5.4.17=06300, STREET=\"Av. Hidalgo 77, Col. Guerrero\", EMAILADDRESS=acods@sat.gob.mx, O=Servicio de Administración Tributaria, CN=A.C. del Servicio de Administración Tributaria";
Pattern pattern = Pattern.compile("CN=([^,]*)");
Matcher matcher = pattern.matcher(myString);
if(matcher.find())
{
System.out.println(matcher.group(1));
}
答案 3 :(得分:1)
你可以用这种方式不用regexp来做到这一点 - 特别是如果你想要检索更多的参数,这可能是好的
示例1
String myString = ...;
String[] firstSplit = myString.split(",");
for (int i=0; i<firstSplit.length; i++) {
String[] secondSplit = firstSplit[i].split("=");
if ("CN".equals(secondSplit[0].trim())) {
System.out.println(secondSplit[1]);
}
}
但这只有在你只使用“,”来分隔参数时才有效。如果你不能像分隔符那样对待“,”那么最好的方法就是regexp或indexof方法
答案 4 :(得分:1)
更新问题:
result = myS.replaceAll (".*CN=", "").replaceAll ("[,/].*", "");
result = result.replaceAll ("[A-Z0-9.]+=", "");
(再次更新,包含更新问题中的[,/]
)。
(再次更新,以回应最新评论)