Regex 如何制作'';非格雷迪

Regex 如何制作'';非格雷迪,regex,non-greedy,Regex,Non Greedy,我有一个类路径值C:\Windows\abc;C:\Windows\def;C:\Windows\ghi,需要获取C:\Windows\def。除了中间路径的def(或者类路径中只有一个路径\..\\..\parent\def)之外,类路径的值可以不同 正则表达式是;?(.*def)但它与C:\Windows\abc;C:\Windows\def 我只想要C:\Windows\def,而不管是否存在就在C:\Windows\def 实现这一目标的正确方法是什么?贪婪不是这里的问题;相反,您需要排

我有一个类路径值
C:\Windows\abc;C:\Windows\def;C:\Windows\ghi
,需要获取
C:\Windows\def
。除了中间路径的
def
(或者类路径中只有一个路径
\..\\..\parent\def
)之外,类路径的值可以不同

正则表达式是
;?(.*def)
但它与
C:\Windows\abc;C:\Windows\def

我只想要
C:\Windows\def
,而不管是否存在
就在
C:\Windows\def


实现这一目标的正确方法是什么?

贪婪不是这里的问题;相反,您需要排除分号

匹配不包含
的字符序列但以
def
结尾:

[^;]*def
并确保后面紧跟着字符串的结尾或


[^;]*def(?=;|$)
在许多引擎中都是非贪婪的
,但似乎您真正想要的是
([^;]*def)
。您可以试试。它在JavaScript中使用吗?它在PCRE中使用。现在,
[^;]*def(?;;$)
正则表达式将匹配
C:\Windows\abcdef中的
;C:\Windows\def;C:\Windows\ghi
。我认为OP只需要在末尾将值与
\def
匹配。@WiktorStribiżew:OP从未说过这不是有意的,但在
def
之前添加
\\
并不难。是的,当要求时,他们通常不会那么健谈:(