首页 > 解决方案 > 正则表达式可以匹配特定字符但不返回结果吗?

问题描述

我有一个字符串:

"abc3-3213dsads123dsdsaasa7/basic-2.xhtml?"

我想获得:

"abc3-3213dsads123dsdsaasa7"

其中"abc3"and的长度"3213dsads123dsdsaasa7"是任意的。我在路由文件的约束中使用它。

我试过:

.+-.+[\/]

但是,它包括/最后。是否可以匹配正则表达式中的字符但在结果中忽略它?

标签: rubyregex

解决方案


str = "abc3-3213dsads123dsdsaasa7/basic-2.xhtml?"

str[/.+(?=\/)/]
  #=> "abc3-3213dsads123dsdsaasa7"

(?=\/)是一个积极的前瞻。它要求匹配的字符串后跟一个正斜杠。

或者,根据需要,您可以使用正则表达式/[^\/]+//.+?-[^\/]+/.

您也可以在不使用正则表达式的情况下轻松完成此操作。

str[0, str.index('/')]
 #=> "abc3-3213dsads123dsdsaasa7"

我假设对正斜杠之前的字符没有限制。这符合 Unix 家族(包括 Linux 和 OS/X)对文件命名的限制,即文件名可以包含除正斜杠和 NUL 以外的任何字符。见这里这里此处讨论了 Windows 对文件名的限制。


推荐阅读