我需要匹配一个包含2个单词vendor_tracks或shop_types中任何一个的url路径,但是商店类型后应跟一个'/'
我当前的REGEX是
//(供应商轨道|商店类型)/
,但如果包含shop_types / 22,则此匹配
我需要我的Regex来匹配以下内容:
/ shop_types?q%5Btrack_department
但不是下面的网址
/ shop_types / 27 / list_pinned_vendors
我的当前人接受两个,而我需要它只接受第一个。我尝试了许多不同的方法来排除“ shop_types”后跟/的情况,但总是会出现转义的反斜杠错误。有什么解决办法吗?或替代的REGEX
答案 0 :(得分:2)
您可以使用环视条件创建自定义限制
>> 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
字符不能为立即字符
请注意,字符串的结尾也将满足此条件,因为这意味着/
后没有shop_types
字符
我尝试了多种方法来排除“ shop_types”后跟/的问题,但总是会出现转义的反斜杠错误
您可以使用%r
定义带有备用定界符的正则表达式
# 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