gpt4 book ai didi

arrays - 新人需要帮助获得正确的正则表达式

转载 作者:行者123 更新时间:2023-12-02 12:34:16 26 4
gpt4 key购买 nike

我有来自 powershell 中网站的证书信息,它们通常如下所示

CN=Google Internet Authority G3, O=Google Trust Services, C=US
  1. 我需要帮助获取正确的正则表达式,以便仅获取 CN= 后面直到逗号的信息

  2. 第二个问题是我获得的一些证书只有 CN=,因此末尾没有逗号,因此看起来像

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
  • )关闭命名组

Regex demo | Try it online

如果文本可以包含逗号,则可以匹配除非贪婪换行符之外的任何字符,后跟匹配逗号和空格或字符串末尾。

CN=(?<issuer>.*?)(?:, |$)

说明

  • CN=按字面意思匹配
  • (?<issuer>命名组issuer
    • .*?匹配除换行符之外的任何字符,非贪婪(尽可能少)
  • )关闭命名组
  • (?:非捕获组
    • , 匹配逗号和空格
    • |或者
    • $断言字符串结尾
  • )关闭命名组

Regex demo | Try it online

关于arrays - 新人需要帮助获得正确的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57581431/

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