使用负前瞻的Regex缺少group2的第一个字符
我需要从以下示例字符串中获取LDAP组名称:使用负前瞻的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
"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”
在左侧和右侧的0+空格字符之间匹配\s*=\s*
=
匹配”(
并开始捕获组”
匹配除[^”]+
以外的任何字符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")