Ruby 将所有文件名与给定扩展名(特定文件名除外)匹配
我有以下正则表达式:Ruby 将所有文件名与给定扩展名(特定文件名除外)匹配,ruby,regex,Ruby,Regex,我有以下正则表达式: ^((?!.*/gradle-wrapper\.jar$)|(.*\.jar$)|(.*\.exe$)) 以及以下数据: rupe-engine/src/main/groovy/com/rupe/engine/JongoAutoConfiguration.java gradle/wrapper/gradle-wrapper.jar gradle/wrapper/gradle-bundle.exe gradle/wrapexe/gradle.git testit.j
^((?!.*/gradle-wrapper\.jar$)|(.*\.jar$)|(.*\.exe$))
以及以下数据:
rupe-engine/src/main/groovy/com/rupe/engine/JongoAutoConfiguration.java
gradle/wrapper/gradle-wrapper.jar
gradle/wrapper/gradle-bundle.exe
gradle/wrapexe/gradle.git
testit.jar
预期结果:
匹配gradle/wrapper/gradle bundle.exe
和testit.jar
实际结果:
也匹配gradle/wrapper/gradle wrapper.jar
,尽管我试图“黑名单”这个文件名。您的正则表达式“出现故障”,因为您使用了一个前瞻分支作为替代分支,因此不再限制模式
您似乎希望匹配以.jar
或.exe
结尾的字符串,而不是以/gradle wrapper.jar
结尾的字符串。使用
^(?!.*/gradle-wrapper\.jar$).*\.(?:jar|exe)$
见
详细信息:
-字符串的开头^
-如果在任何0+个字符((?!.*/gradle wrapper\.jar$)
)之后有紧跟字符串结尾的*
子字符串(/gradle wrapper.jar
),则匹配失败$
-将任何0+字符(除换行字符外)匹配到最后一个*\.
-要么(?:jar | exe)
要么jar
exe
-字符串结束$
.jar
或.exe
结尾的字符串,而不是以/gradle wrapper.jar
结尾的字符串。使用
^(?!.*/gradle-wrapper\.jar$).*\.(?:jar|exe)$
见
详细信息:
-字符串的开头^
-如果在任何0+个字符((?!.*/gradle wrapper\.jar$)
)之后有紧跟字符串结尾的*
子字符串(/gradle wrapper.jar
),则匹配失败$
-将任何0+字符(除换行字符外)匹配到最后一个*\.
-要么(?:jar | exe)
要么jar
exe
-字符串结束$