Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式匹配带转义字符和不带转义字符的字符串_Regex_Powershell_Split - Fatal编程技术网

Regex 使用正则表达式匹配带转义字符和不带转义字符的字符串

Regex 使用正则表达式匹配带转义字符和不带转义字符的字符串,regex,powershell,split,Regex,Powershell,Split,我有不同于Active Directory对象的可分辨名称,在将这些dn拆分为简单名称时需要过滤掉转义字符 我已经有了PowerShell的字符串-split,但这并没有过滤掉转义字符。我已经尝试了带有正向查找的正则表达式,但在这种情况下,我确实需要一些类似于可选正向查找的东西?也许我只是想得太复杂了 字符串示例: OU=External,OU=T1,OU=\+TE,DC=test,DC=dir OU=\\\\外部,OU=T1,OU=\+TE,DC=test,DC=dir OU=\+外部,OU=

我有不同于Active Directory对象的可分辨名称,在将这些dn拆分为简单名称时需要过滤掉转义字符

我已经有了PowerShell的字符串
-split
,但这并没有过滤掉转义字符。我已经尝试了带有正向查找的正则表达式,但在这种情况下,我确实需要一些类似于可选正向查找的东西?也许我只是想得太复杂了

字符串示例:

  • OU=External,OU=T1,OU=\+TE,DC=test,DC=dir
  • OU=\\\\外部,OU=T1,OU=\+TE,DC=test,DC=dir
  • OU=\+外部,OU=T1,OU=\+TE,DC=test,DC=dir
  • 因为
    +
    #
    是转义的,但它们是这些对象的实际名称,所以我需要删除转义字符

    使用以下PowerShell,可以获取对象的名称

    ($variable -split ',*..=')[1]
    
    实际结果:

  • 外部
  • \\外部
  • \+外部
  • 预期结果:

  • 外部
  • #外部
  • +外部
  • 可以将regex与
    $variable-creplace“regex”
    一起使用,但我找不到一个适合所有这些情况的regex


    我的尝试是:
    (?只需稍加修改,您就可以在当前正则表达式中添加斜杠作为可选项。您已经对前导逗号做了类似的操作

    "OU=\#External,OU=T1,OU=\+TE,DC=test,DC=dir" -split ',?..=\\?'
    

    如果你只想读第一节,你可以更进一步,但这回答了你的基本问题。可能会有其他的效率,但可能不值得。

    只要稍作改动,你就可以在当前的正则表达式中添加斜杠作为可选项。你已经对前导逗号做了类似的操作

    "OU=\#External,OU=T1,OU=\+TE,DC=test,DC=dir" -split ',?..=\\?'
    

    如果您只看第一节,您可以进一步了解这一点,但这回答了您的基本问题。可能还有其他效率需要提高,但可能不值得。

    要从DN中提取第一个OU名称,同时删除可选的前导反斜杠,您可以使用如下正则表达式:

    演示:

    $dn1 = 'OU=External,OU=T1,OU=\+TE,DC=test,DC=dir'
    $dn2 = 'OU=\#External,OU=T1,OU=\+TE,DC=test,DC=dir'
    $dn3 = 'OU=\+External,OU=T1,OU=\+TE,DC=test,DC=dir'
    
    $dn1 -replace 'OU=\\?(.*?), *..=.*$', '$1'  # output: External
    $dn2 -replace 'OU=\\?(.*?), *..=.*$', '$1'  # output: #External
    $dn3 -replace 'OU=\\?(.*?), *..=.*$', '$1'  # output: +External
    

    要从DN中提取第一个OU名称,同时删除可选的前导反斜杠,可以使用如下正则表达式:

    演示:

    $dn1 = 'OU=External,OU=T1,OU=\+TE,DC=test,DC=dir'
    $dn2 = 'OU=\#External,OU=T1,OU=\+TE,DC=test,DC=dir'
    $dn3 = 'OU=\+External,OU=T1,OU=\+TE,DC=test,DC=dir'
    
    $dn1 -replace 'OU=\\?(.*?), *..=.*$', '$1'  # output: External
    $dn2 -replace 'OU=\\?(.*?), *..=.*$', '$1'  # output: #External
    $dn3 -replace 'OU=\\?(.*?), *..=.*$', '$1'  # output: +External
    

    您可以使用
    -Replace
    操作符删除\.
    $OU-Replace“\\”
    。您可以在拆分
    -split',?..=\?'
    中添加斜杠作为可选项,这与处理命令的方式类似。您可以使用
    -Replace
    操作符删除\.
    $OU Replace“\\”
    。你可以在split
    -split',?..=\\?'中添加斜杠作为可选项。
    类似于你处理commaThanks Matt!这就是我要找的。谢谢Matt!这就是我要找的。谢谢你的快速回答!我对regex相当陌生,希望有这么多人愿意帮助!谢谢你的快速回答!我是f对regex来说是个新鲜人,有那么多人愿意帮忙,这让我很高兴!