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

Regex: find word between slash and matching keyword in url

例如:

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

我试图从上面的 url 中提取 'target' 这个词。 到目前为止,我有以下表达式:

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

但是这会从第一个斜杠 ('//www.domain.com/junk/target')

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

[^\/]+(?=\/keyword)

解释:

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

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

\/([^\/]+)\/keyword

字符串 target 将在第一组中。

您可以使用

%r{/([^/]+)/keyword/}

参见Rubular demo(注意,如果keyword可能出现在字符串的末尾,您需要在末尾添加一个交替 - %r{/([^/]+)/keyword(?:/|\z)})。

您需要的值在第 1 组中。

Ruby demo:

lnk[%r{/([^/]+)/keyword/}, 1]

图案说明:

  • / - 斜杠
  • ([^/]+) - 捕获组 1 匹配除 /
  • 以外的一个或多个字符
  • /keyword/ - 文字 /keyword/ 子字符串。