首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与1+ chr匹配,但不匹配500 chr。

与1+ chr匹配,但不匹配500 chr。
EN

Stack Overflow用户
提问于 2013-06-13 13:56:18
回答 4查看 221关注 0票数 3

我正在寻找一个正则表达式,该表达式将匹配长度为1个或更多字符的内容,这些字符的长度为而不是匹配500。这将在Rails路由文件中使用,特别是用于处理异常。

routes.rb

代码语言:javascript
复制
match '/500', to: 'errors#server_error'
match '/:anything', :to => "errors#not_found", :constraints => { :anything => /THE REGEX GOES HERE/ }

我有点迷茫,不知道如何定义正则表达式匹配的东西,同时不匹配其他的东西。

EN

回答 4

Stack Overflow用户

发布于 2013-06-13 14:32:40

可以使用此regex检查字符串是否不包含子字符串500:

代码语言:javascript
复制
\A(?>[^5]++|5++(?!00))+\z

如果您想允许5000或5500.,您可以这样做:

代码语言:javascript
复制
\A(?>[^5]++|5{2,}+|5(?!00(?!0)))+\z

第一个字符串解释:

代码语言:javascript
复制
\A           # begining of the string
(?>          # opening of an atomic group
   [^5]++    # all characters but 5 one or more times (possessive)
  |          # OR
   5++(?!00) # one or more 5 not followed by 00
)+           # closing of the atomic group, one or more times
\z           # end of the string

占有量词原子群在这里是为了避免regex引擎回溯以获得更好的性能( regex很快就会失败)。

票数 2
EN

Stack Overflow用户

发布于 2013-06-13 15:02:42

Rails路由按照它们在routes.rb中出现的顺序进行匹配。通过将/500放在列表的第一位(或更高的位置),它保证了进一步向下的路由与/500不匹配。你不应该担心这个。

所以,相反,把它分成更多的路线。

代码语言:javascript
复制
match '/500', to: 'errors#server_error'
match '.*500.*', to: 'somewhere else'
match '/:anything', :to => "errors#not_found"

别担心约束。

票数 1
EN

Stack Overflow用户

发布于 2013-06-14 08:56:30

你真的需要那个Regex吗?你的路线定义

match '/500', to: 'errors#server_error'

将捕获所有这些/500请求,这意味着您的下一个路由规则

match '/:anything', :to => "errors#not_found"

不会自动得到的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17088913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档