Ruby on rails Regex Ruby-字符串后面不跟一个"/&引用;

Ruby on rails Regex Ruby-字符串后面不跟一个"/&引用;,ruby-on-rails,ruby,regex,string,Ruby On Rails,Ruby,Regex,String,我需要将url路径与包含两个单词中任意一个的vendor_tracks或shop_types进行匹配,但是shop types后面应该跟一个“/” 我现在的正则表达式是 //(供应商轨道|车间类型)/ ,但如果包含车间类型/22,则此匹配 我需要我的正则表达式匹配以下内容: /车间类型?q%5B车间类型 但不是下面的url /商店类型/27/列出供应商 我的当前版本可以同时接受这两个,而我需要它只接受第一个。我尝试了许多不同的方法来排除后跟/的“shop_types”,但总是得到转义反斜杠错误。

我需要将url路径与包含两个单词中任意一个的vendor_tracks或shop_types进行匹配,但是shop types后面应该跟一个“/”

我现在的正则表达式是

//(供应商轨道|车间类型)/

,但如果包含车间类型/22,则此匹配

我需要我的正则表达式匹配以下内容:

/车间类型?q%5B车间类型

但不是下面的url

/商店类型/27/列出供应商


我的当前版本可以同时接受这两个,而我需要它只接受第一个。我尝试了许多不同的方法来排除后跟/的“shop_types”,但总是得到转义反斜杠错误。有什么解决办法吗?或者替代正则表达式,您可以使用lookarounds创建自定义限制

>> str1 = '/shop_types?q%5Btrack_department'
=> "/shop_types?q%5Btrack_department"
>> str2 = '/shop_types/27/list_pinned_vendors'
=> "/shop_types/27/list_pinned_vendors"

>> str1.match?(/shop_types(?!\/)/)
=> true
>> str2.match?(/shop_types(?!\/)/)
=> false
这里的
(?!\/)
是负向前看,表示
/
字符不能是
商店类型之后的直接字符

注意字符串的结尾也将满足此条件,因为这意味着
商店类型之后没有
/
字符


我尝试了许多不同的方法来排除后跟/的“shop_types”,但总是得到转义反斜杠错误

您可以使用
%r
定义带有备用分隔符的regexp

# here the condition has also been changed
# restriction is that / shouldn't occur anywhere after matching shop_types
>> str1.match?(%r{shop_types(?!.*/)})
=> true
>> str2.match?(%r{shop_types(?!.*/)})
=> false

显然,在你的第一句话中,“应该遵循”漏掉了“不”。这是一个纯粹的Ruby问题,因此您不应该有“RubyonRails”标签。标记“string”太笼统了,我怀疑它是否有任何用途。在定义负向前看时,您会说,“…shop\u类型后的字符”。这是有误导性的,因为负前瞻并不要求前面的匹配后面跟一个字符;也就是说,前面的匹配可能在字符串的末尾(例如,
“cat.match?”(/t(?!z)/)#=>true
。我确信您知道这一点,但您应该说(sic),“…前面的匹配没有被遵循…”.imo,你应该在这里结束你的回答。最后一部分回答了两个没有被问到的问题。是的,你所说的可能会有帮助,但其他许多问题的答案也可能会有帮助。