Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法匹配Sinatra/Ruby中的分页URL_Ruby_Regex_Sinatra - Fatal编程技术网

无法匹配Sinatra/Ruby中的分页URL

无法匹配Sinatra/Ruby中的分页URL,ruby,regex,sinatra,Ruby,Regex,Sinatra,我正在尝试匹配这些有效的URL: /match/<searchterm> /match/<searchterm>/page/<number> 。。。等等 这些都是无效的例子: /match/Hello /match/Hello There /match/Hello There & Bye /match/Hello & Good Bye /match/Hello There Lots of & words here /match/He

我正在尝试匹配这些有效的URL:

/match/<searchterm>
/match/<searchterm>/page/<number>
。。。等等

这些都是无效的例子:

/match/Hello
/match/Hello There
/match/Hello There & Bye
/match/Hello & Good Bye
/match/Hello There Lots of & words here

/match/Hello/page/1
/match/Hello There/page/10
/match/Hello There & Bye/page/33
/match/Hello!
/match/Hello *
/match/Hello/page
/match/Hello /page/1
/match/Hello There    /page/1
我已经尝试了几个正则表达式,这一个似乎很接近():

但它会做一些奇怪的事情,比如成功匹配:

/match/Hello ! There           /page/1
此外,当我在我的sinatra应用程序中尝试这一点时,Rubular正则表达式根本不起作用:

get %r{\/match\/([[\w]+[\s&]*]+)(\/page\/(\d+))*} do
   puts 'Matched'
end
即, 如果Rubular说找不到该url,Sinatra将无法找到该url:

/match/Hello & There/page/1
对于这个问题,什么是合适的正则表达式?为什么正则表达式在红细胞中起作用而在Sinatra中不起作用(如示例所示)

编辑:我认为url中的空格解释了为什么Sinatra不匹配有效的正则表达式。提供给Sinatra的url返回为:

/match/Hello%20&%20There
其中的空白实际上不是空白

编辑2:Avinash Raj的正则表达式运行良好,但由于url中的空格问题,我不得不将
\s
替换为
%20

新问题:是否将
\s
替换为
%20
此问题的有效修复程序?或者Sinatra有没有合适的方法来处理url中的空白?我在文档中没有看到任何关于它的信息:


您需要在图案中包含起始和结束锚定,以便进行精确的线匹配

^\/match\/(\w(?:[\w&\s]|%20)*\w)(?:\/page\/(\d+))*$


我在Sinatra中尝试过,但Sinatra无法匹配:
获取%r{^\/match/(\w[\w&\s]*\w)(?:\/page\/(\d+)))*$}do
在以下情况下失败:
/match/Hello&There
。您的正则表达式似乎是正确的。我认为问题在于URL中的空白(请参见编辑)。一个有效的解决方案是查找
%20
而不是
\s
?@user21398更新了包含空格或
%20
的链接。它将匹配两种类型的链接。。
^\/match\/(\w(?:[\w&\s]|%20)*\w)(?:\/page\/(\d+))*$