You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则中已转义字符串的二次转义方法及DN转换脚本问题求助

正则中已转义字符串的二次转义方法及DN转换脚本问题求助

嘿,我来帮你捋捋这个问题~

首先,你的问题核心在于:当前正则([^\/]+)会把所有/字符都当成OU的分隔符,但你的CN里存在转义过的\/——这些/其实是CN名称的一部分,不是真正的分隔符,所以正则错误地拆分了这些转义后的/,导致生成了多余的OU项。

你的思路方向是对的,确实需要处理转义的/,但不是简单的二次转义,而是要让正则能区分被转义的\/和作为分隔符的原生/。

解决方案:使用正则断言区分转义与非转义的分隔符

我们可以用负向后行断言来匹配那些「前面没有反斜杠」的/,也就是真正的分隔符,这样就能跳过转义后的\/。同时,拆分后还要把转义的\/还原成真实的/,这样DN里的OU名称才是正确的。

修改后的代码示例:

# 假设$DNOUs是你的原始CN字符串,比如 "test.example.com/This\/is\/a\/escaped/\space/\OU/person"
# 匹配未被反斜杠转义的/作为分隔符
$splitPattern = '(?<!\\)/'
$OUItems = $DNOUs -split $splitPattern

$OU = ""
foreach ($item in $OUItems) {
    # 把转义的\/还原成真实的/
    $cleanItem = $item -replace '\\/', '/'
    $OU += "OU=$cleanItem,"
}

# 移除末尾多余的逗号
$OU = $OU.TrimEnd(',')

关键解释:

  • 正则(?<!\\)/:(?<!\\)是负向后行断言,确保当前匹配的/前面没有反斜杠,也就是只匹配作为分隔符的原生/,跳过转义后的\/。
  • 还原转义字符:用-replace '\\/', '/'把CN里的转义标记去掉,让OU名称恢复成原本的样子,这样生成的DN才符合规范。

如果还是有问题,可以先输出$OUItems看看拆分后的结果是否正确,再调整正则或者转义处理逻辑就行~

备注:内容来源于stack exchange,提问作者user66001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:29:39