perl - 如何使 perl 正则表达式不贪心?
问题描述
我有这样的路径:
/nfs/usr/x86-64_linux71/gnua/4.0.0/features/com.asas.gnua.feature_4.0.0
/nfs/usr/x86-64_linux71/gnua/4.0.0/plugins/org.codehaus.jackson_1.0.0/META-INF
/nfs/usr/x86-64_linux71/gnua/4.0.0/configuration
/nfs/usr/x86-64_linux71/gnua/4.0.0/plugins/org.easymock_2.5.1
/nfs/usr/x86-64_linux71/gnua/4.0.0/features/org.eclipse.e4.rcp_1.6.100.v20180611-0422
我想构建一个正则表达式来捕捉这些路径gnua
,第一组和4.0.0
第二组也是如此。我试过了:
^\/nfs\/.*?\/.*?\_linux\d+\/(.*)?\/(.*)?\/.*?
但我得到gnua/4.0.0
第一组和features
第二组。我怎样才能让第一组gnua
和第二组4.0.0
在 Perl 中?换句话说,最后一个.*?
应该是features/com.asas.gnua.feature_4.0.0
.
解决方案
将问号移动到匹配的组中。
/^\/nfs\/.*?\/.*?\_linux\d+\/(.*?)\/(.*?)\/.*?/
更改分隔符可提高可读性:
m{^/nfs/.*?/.*?_linux\d+/(.*?)/(.*?)/.*?}
但使用([^/]*)
通常比(.*?)
.
推荐阅读
- android - 将无限 FlatList 与搜索一起使用时遇到问题
- java - 在 SQL 中,我可以向不需要的字段添加唯一约束吗?
- java - 标头的参数类?
- sql-server - 出现错误:从 SQL Server 中的字符串转换日期和/或时间时转换失败
- javascript - 未定义获取错误“$”。有人可以解释它的原因是什么
- javascript - 为什么没有在每次渲染时重复样式化组件动画?
- passwords - 如何有效分配碎玻璃帐户以进行云访问?
- php - 从 parse str 生成的数组中访问字符串元素;需要一个对象
- python - 将线性变换列表应用于点云列表
- firebase - 如何在 Windows 10 上正确关闭 Firebase 模拟器