我通过很多方式浏览谷歌从证书的主题序列号中获取特殊主题,实际上有些黑客可以使用,但它很不错,我想翻译它改为正则表达式
输入参数(完整刺痛)看起来像:某些文字,这里可能是附加文字,CN = John Doe + SERIALNUMBER = XID:1234-2002-2-123413342134 ,O =否, C = EN
我想要的是XID:1234-2002-2-123413342134,所以我所知道的是我要查找的子字符串以" XID开头:"并应分为','
现在我喜欢,不漂亮!:
List<string> SubjectAttributes = cert.Subject.Split(',').ToList();
string xid = SubjectAttributes.Where(x => x.Contains("XID:")).FirstOrDefault();
string resten = xid.Substring(xid.LastIndexOf('=') + 1);
正则表达式会是什么样子,或者会有更好的方式,我也关心自己的解决方案,因为会有很多indexoutofbounds / nullreference异常。
干杯
答案 0 :(得分:1)
如果您需要一个从XID:
获取子字符串然后包含数字或连字符的正则表达式,您可以使用以下模式:
XID:[0-9-]+
或者甚至使用单词边界XID
看起来是一个完整的单词:
\bXID:[0-9-]+
请参阅regex demo
C#:
using System;
using System.Text.RegularExpressions;
using System.Linq;
public class Test
{
public static void Main()
{
var str = "some text, here could be additional text, CN=John Doe + SERIALNUMBER=XID:1234-2002-2-123413342134, O=No, C=EN";
var res = Regex.Match(str, @"\bXID:[0-9-]+");
if (res.Success)
Console.WriteLine(res.Value);
}
}
答案 1 :(得分:0)
您可以使用否定的char类。
XID:[^,]+
[^,]+
匹配任何字符,但不匹配,
一次或多次。
或
@"\bXID:[^,]+"
或
@"(?<==)XID:[^,]+"