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