(PowerShell) 使用转义分隔符分割字符串

iRo*_*Ron 3 powershell split escaping character

split模块通常用于将 Active Directory 可分辨名称和规范名称拆分为 RDN,从而方便地忘记可能在 OU 和 CN 中使用的转义分隔符,如下所示:

\n\n

带有转义逗号的专有名称示例:

\n\n
CN=Test User,OU=Comma\\,Test,OU=Test,DC=domain,DC=com\n
Run Code Online (Sandbox Code Playgroud)\n\n

带有转义斜杠的规范名称示例:

\n\n
Domain.com/Test/Slash\\/Test/Test User\n
Run Code Online (Sandbox Code Playgroud)\n\n

互联网上有几个分裂的例子,甚至没有提到这个陷阱,它可能会工作很长时间,但迟早会给解决这个编程缺陷带来很多痛苦。

\n\n

我不\xe2\x80\x99t 认为有一种简单的方法可以使用正则表达式正确分割转义字符串(另请参阅:是否存在包含转义序列的字符串的纯正则表达式分割?)。\n。

\n

mjo*_*nor 5

使用负向后查找:

$text = 'CN=Test User,OU=Comma\,Test,OU=Test,DC=domain,DC=com'
$text -split '(?<!\\),'

CN=Test User
OU=Comma\,Test
OU=Test
DC=domain
DC=com

$text = 'Domain.com/Test/Slash\/Test/Test User'
$text -split '(?<!\\)/'

Domain.com
Test
Slash\/Test
Test User
Run Code Online (Sandbox Code Playgroud)