ruby - 正则表达式可以匹配特定字符但不返回结果吗?
问题描述
我有一个字符串:
"abc3-3213dsads123dsdsaasa7/basic-2.xhtml?"
我想获得:
"abc3-3213dsads123dsdsaasa7"
其中"abc3"
and的长度"3213dsads123dsdsaasa7"
是任意的。我在路由文件的约束中使用它。
我试过:
.+-.+[\/]
但是,它包括/
最后。是否可以匹配正则表达式中的字符但在结果中忽略它?
解决方案
str = "abc3-3213dsads123dsdsaasa7/basic-2.xhtml?"
str[/.+(?=\/)/]
#=> "abc3-3213dsads123dsdsaasa7"
(?=\/)
是一个积极的前瞻。它要求匹配的字符串后跟一个正斜杠。
或者,根据需要,您可以使用正则表达式/[^\/]+/
或/.+?-[^\/]+/
.
您也可以在不使用正则表达式的情况下轻松完成此操作。
str[0, str.index('/')]
#=> "abc3-3213dsads123dsdsaasa7"
我假设对正斜杠之前的字符没有限制。这符合 Unix 家族(包括 Linux 和 OS/X)对文件命名的限制,即文件名可以包含除正斜杠和 NUL 以外的任何字符。见这里和这里。此处讨论了 Windows 对文件名的限制。
推荐阅读
- shopify - 从多个系列中提取产品 - Shopify Liquid
- reactjs - 反应 useEffect 和 useRef
- google-analytics - 在 SAS 中将 Google Analytics API 与 OAuth 客户端一起使用,无需部署应用程序
- c# - 在 try catch 中缺少插入表
- php - PHP会话和memcached服务器的问题
- machine-learning - 如何将 optuna 的 study.optimize 详细程度设置为 0?
- javascript - 结合数组函数解构
- mysql - MySQL删除然后选择查询
- cypress - 如何在 cypress 中获取对浏览器弹出窗口的引用?用于选择蓝牙设备的弹出窗口
- laravel - 如何在 laravel 中使用 Eloquent 关系从 4 个表中检索数据