怎么做 '?'非gready

时间:2017-03-31 06:46:36

标签: regex non-greedy

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

正则表达式为;?(.*def)但匹配C:\Windows\abc;C:\Windows\def

C:\Windows\def

之前,无论;是否存在,我都只想C:\Windows\def

实现它的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

贪婪不是问题所在;相反,你需要排除分号。

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

[^;]*def

并确保其后跟字符串的结尾或;

[^;]*def(?=;|$)