Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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
Ruby中的正则表达式问题_Ruby_Regex - Fatal编程技术网

Ruby中的正则表达式问题

Ruby中的正则表达式问题,ruby,regex,Ruby,Regex,我正在尝试使用Ruby从字符串中提取下面的模式,而我在Ruby上似乎没有走得太远 这是我正在使用的正则表达式\/p\/[\w-\/]*[\d+] 这是我试图提取的字符串类型 /p/hyphenated-words/more-hyphenated-words/102049294 /p/连字符单词/更多连字符单词/102049294 因此,简而言之,字符串始终以/p/开头,以多个数字结尾,并包含一个或多个子目录,其中可能包含连字符 我的正则表达式适用于一些在线表达式测试程序,但不适用于Ruby。字符

我正在尝试使用Ruby从字符串中提取下面的模式,而我在Ruby上似乎没有走得太远

这是我正在使用的正则表达式
\/p\/[\w-\/]*[\d+]

这是我试图提取的字符串类型

/p/hyphenated-words/more-hyphenated-words/102049294 /p/连字符单词/更多连字符单词/102049294 因此,简而言之,字符串始终以/p/开头,以多个数字结尾,并包含一个或多个子目录,其中可能包含连字符


我的正则表达式适用于一些在线表达式测试程序,但不适用于Ruby。

字符类中的连字符表示字符范围。将其转义为文字连字符。也就是说,将此
[\w-\/]
更改为
[\w-\/]


也将
[\d+]
更改为
\d+
,不带方括号。

除了@Mark Byers答案外:

 /p/[\w-/]*[\d+]
正则表达式的[\d+]部分不相关。原因是它前面有一个贪婪的量词,它量化一个类,而这个类又包含
\w
<代码>\w翻译成
[a-zA-Z0-9.]
,它将“吃掉”后面的任何挖掘


最后,不使用[\d+],只需使用\d(如果必须的话)。

您需要在ruby中包含前斜杠。
因此,您的正则表达式应该看起来像
\/\p\/\
,这将完全匹配
/p/


以上文章将帮助您完成其余部分

您应该在浏览器中查看可以在何处测试Ruby regex live。我一直在用它。嗨,约翰,我一直在用红宝石。它很方便,以前没用。如果我认为某些东西不能正常工作,我也会使用。只有在使用
/
作为正则表达式分隔符时,才需要这样做。我更喜欢做
%r{/p/}
而不是
/\/p\/