我在Powershell中有来自网站的证书信息,它们通常看起来像这样
CN=Google Internet Authority G3, O=Google Trust Services, C=US
CN=Google Internet Authority G3
如何使用正则表达式来捕获这两种情况?
这是我认为可以工作并尝试的方法:
$cert.Issuer -match "CN=(?<issuer>.*(?=,))"
Write-Host $Matches['issuer']
>> Google Internet Authority G3, O=Google Trust Services
$cert.Issuer -match "CN=(?<issuer>.*)?,?\s"
Write-Host $Matches['issuer']
>> Google Internet Authority G3, O=Google Trust Services,
$cert.Issuer -match "CN=(?<issuer>.*),|\s"
Write-Host $Matches['issuer']
>> Google Internet Authority G3, O=Google Trust Services
所以我只想
Google Internet Authority G3
它是否有逗号,然后是更多信息,还是没有逗号,是字符串的结尾
谢谢!
最佳答案
如果文本本身不能包含逗号,则可以使用否定的字符类来匹配除逗号以外的任何字符。然后匹配在命名捕获组issuer
中
CN=(?<issuer>[^,]+)
如果不想匹配换行符,可以扩展否定的字符类
CN=(?<issuer>[^,\r\n]+)
说明
CN=
从字面上匹配(?<issuer>
命名组issuer
[^,\r\n]+
Negated character class,匹配除逗号或换行符之外的任何字符的1+倍)
关闭已命名的组Regex demo | Try it online
如果文本可以包含逗号,则可以匹配除换行符非贪心字符之外的任何字符,然后匹配逗号和空格或字符串的结尾。
CN=(?<issuer>.*?)(?:, |$)
说明
CN=
从字面上匹配(?<issuer>
命名组issuer
.*?
匹配除换行符非贪心(尽可能少)以外的任何字符)
关闭已命名的组(?:
非捕获组,
匹配逗号和空格|
或$
声明字符串)
关闭已命名的组Regex demo | Try it online