Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.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缺少group2的第一个字符_Regex_Powershell_Regex Lookarounds - Fatal编程技术网

使用负前瞻的Regex缺少group2的第一个字符

使用负前瞻的Regex缺少group2的第一个字符,regex,powershell,regex-lookarounds,Regex,Powershell,Regex Lookarounds,我需要从以下示例字符串中获取LDAP组名称: "user.ldap.groups.name" = "M-Role13" AND ("user.ldap.groups.name"= "M Role1" OR "user.ldap.groups.name" = "M.Group-Role16" OR "user.ldap.groups.name"="Admin Role" ) AND "common.platform" = "iOS" AND ( AND "ios.PersonalHotspotE

我需要从以下示例字符串中获取LDAP组名称:

"user.ldap.groups.name" = "M-Role13" AND ("user.ldap.groups.name"= "M Role1" OR "user.ldap.groups.name" = "M.Group-Role16" OR "user.ldap.groups.name"="Admin Role"  ) AND "common.platform" = "iOS" AND ( AND "ios.PersonalHotspotEnabled" = true  ) AND "common.retired" = False
我使用这个正则表达式来匹配字符串中包含LDAP组的部分

("user\.ldap\.groups\.name"?.=.?".+?(.*?)")(?!"user\.ldap\.groups\.name")
但它在group2中匹配的是没有第一个字符的名称。

关于您尝试的模式的一些注释

  • 它缺少第一个字符的原因是因为此部分
    +?
    至少需要一个字符
  • 请注意,在本部分中,
    “?.=.?”
    匹配可选的
    ,第二个点为可选点的任何字符之间的等号,然后是
  • 这部分
    (.*))(?!“user\.ldap\.groups\.name”)
    使用一个非贪心点
    *?
    ,该点将尽可能少地放弃以满足与
    匹配的条件,该点后面不直接跟
    user.ldap.groups.name
    。请参阅错误匹配的示例

你可以使用

部分地

  • “user\.ldap\.groups\.name”
    匹配
  • \s*=\s*
    在左侧和右侧的0+空格字符之间匹配
    =
  • ”(
    匹配
    并开始捕获组
    • [^”]+
      匹配除
      以外的任何字符1次以上
  • )“
    关闭组并匹配


或者,如果您希望包含负面前瞻:

"user\.ldap\.groups\.name"\s*=\s*"([^"]+)"(?!"user\.ldap\.groups\.name")

欢迎来到SO!
/“user\.ldap\.groups\.name”\s*=\s*(.*?)/
怎么样?不确定是否有必要捕获整个模式和最后一个负前瞻性,因为非贪婪的
(.*)“
终止于最后一个
字符。
"user\.ldap\.groups\.name"\s*=\s*"([^"]+)"(?!"user\.ldap\.groups\.name")