正则表达式:在网址中找到斜杠和匹配关键字之间的单词

时间:2017-02-14 22:36:07

标签: ruby-on-rails ruby regex regex-lookarounds

例如:

http://www.domain.com/junk/target/keyword/junk

我试图说出“目标”这个词。来自上面的网址。 到目前为止,我有以下表达式:

(?=\/).*?(?=\/keyword\/)

但是这会从第一个斜杠中提取所有内容(' // www.domain.com/junk/target')

2 个答案:

答案 0 :(得分:3)

您可以使用

target

请参阅Rubular demo(请注意,如果%r{/([^/]+)/keyword/} 可能出现在字符串的末尾,则需要在结尾添加一个替换 - keyword)。

您需要的值在第1组内。

Ruby demo

%r{/([^/]+)/keyword(?:/|\z)}

模式说明

  • lnk[%r{/([^/]+)/keyword/}, 1] - 斜线
  • / - 捕获与([^/]+)以外的一个或多个字符匹配的第1组
  • / - 文字/keyword/子字符串。

答案 1 :(得分:2)

您可以将否定的字符类与正向前瞻结合使用:

timer

说明:

  • [^\/]+(?=\/keyword) - 与一个或多个[^\/]+字符相匹配的否定字符集
  • / - 与以下(?=\/keyword)字符串匹配的正向前瞻。

当然你也可以使用一个捕获组:

/keyword

字符串\/([^\/]+)\/keyword 将位于第一组中。