前瞻数据不存在时的正则表达式正向前瞻 (PCRE)

Ben*_*enH 5 regex

我正在尝试匹配一个格式类似于以下的字符串:

username=joe password='this! is a password with "quotes" and spaces#913 custom1 customd afd weirdhuh? custom1=myvalue
Run Code Online (Sandbox Code Playgroud)

为了更详细地解释,这是一个由等号分隔的变量列表。可以传递的有效变量是:用户名、密码和 customX(其中 X 是任意数量的数字)。

我特别想匹配密码字段,因为从技术上讲,传递的变量可以有任意数量的引号、空格等,这些都是有效字符。我决定用于确定密码字符串何时终止的最佳“断点”是“customX=”字符串的存在,它推断下一个变量正在开始。

因此,在上面的例子中,实际的密码是:

'this! is a password with "quotes" and spaces#913 custom1 customd afd weird huh?
Run Code Online (Sandbox Code Playgroud)

我已经到达以下正则表达式:

(?i)password(?-i)=.+?(?= (?i)custom(?-i)\d+=)
Run Code Online (Sandbox Code Playgroud)

这似乎与以下内容相符:

password='this! is a password with "quotes" and spaces#913 custom1 customd afd weird huh?
Run Code Online (Sandbox Code Playgroud)

这实际上是我想要的(我可以轻松解析出“password=”),但问题是这个正则表达式似乎只有在字符串末尾存在最终的“custom1=myvalue”时才有效。如果将其删除,则根本没有匹配项。

无论最终值是否存在,我都需要能够匹配密码字符串。

如果您可以去掉“密码=”以仅获得实际密码,则可以获得奖励积分。

Mát*_*ász 2

但问题是这个正则表达式似乎只有在存在最终的“custom1=myvalue”时才起作用

您可以添加可选的字符串结尾来匹配,而不是custom1=myvalue
(?i)password(?-i)=.+?((?= (?i)custom(?-i)\d+=)|$)

如果您可以去掉“password=”而只得到实际的密码,那就加分了。

匹配时使用lookbehind password=
(?<=(?i)password(?-i)=).+?((?= (?i)custom(?-i)\d+=)|$)