我有以下SDDL:
O:BAG:BAD:(A;;CCDCLCSWRP;;;BA)(A;;CCDCSW;;;WD)(A;;CCDCLCSWRP;;;S-1-5-32-562)(A;;CCDCLCSWRP;;;LU)(A;;CCLCRP;;;S-1-5-21-4217728705-3687557540-3107027809-1003)
不幸的是我一直这样:
(A;;CCDCLCSWRP;;;BA)(A;;CCDCSW;;;WD)
我想要的只是(A;;CCDCSW;;;WD)
。
我的正则表达式是:(\(A;.+;WD\))
:找到" (A;
"一些字符以" ;WD)
"
我已经尝试过让比赛变得懒惰而且我已经尝试排除" )(
"基于stackoverflow正则表达式标记搜索的字符对,查找其他人已回答类似问题的示例。
我真的很困惑为什么排除这些不适用的工作:
(\(A;.+[^\(\)]*.+;WD\))
:找到" (A;
"其次是一些角色,其中没有一个是" )(
''其次是以" ;WD)
"
这是我对使用负面看法的猜测:
(\(A;.+^((?!\)\().).+;WD\))
并不匹配任何东西。
我还在PowerShell v3.0中使用以下代码执行此操作:
$RegExPattern = [regex]"(\($ACE_Type;.*;$ACE_SID\))+?"
if ($SDDL -match $RegExPattern) {
$MatchingACE = $Matches[0]
此实例中的$ACE_Type = "A"
和$ACE_SID = "WD"
。
答案 0 :(得分:2)
您几乎拥有第二个正则表达式模式的解决方案。问题是你包含了太多.
个通配符。这应该是你所需要的:
A;[^()]+;WD
当然,如果您只想在A;
和;WD
之间捕获字符串:
A;([^()]+);WD
然后只需用\1
替换。
答案 1 :(得分:1)
我对此进行了简化,然后添加了外观,以便您只匹配预期的字符串(在A;...;WD
之间)。这看起来是A;
,然后匹配1个非括号字符,同时展望;WD
。
(?<=A;)[^()]+(?=;WD)