正则表达式:在URL

问题描述:

如发现斜线和匹配关键词的词:正则表达式:在URL

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

我想从上面的网址抠字眼“目标”。 到目前为止,我有以下表现:

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

然而,这一切拉从第一个斜杠(“//www.domain.com/junk/target”)

+0

你的正则表达式失败的原因是'\ /'将匹配字符串中的第一个'/','。*?'将匹配任何0+字符直到'/ keyword /',因此包括任何'/'它在路上发现。在这种情况下,否定字符类'[^ /]'是最简单的修复方法。 –

您可以使用

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

Rubular demo(注意,如果keyword可以在字符串的结尾出现,则需要在最后添加的交替 - %r{/([^/]+)/keyword(?:/|\z)})。

所需要的值是内部组1.

Ruby demo

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

模式描述

  • / - 斜线
  • ([^/]+) - 捕获组1匹配一个或多个字符除/
  • /keyword/ - 字面/keyword/子串。
+1

您可以使用%r文字来使其更具可读性。 %R {/([^ /] +)/关键字/} – Joshua

您可以使用一个否定的字符类在与正超前组合:

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

说明:

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

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

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

字符串target将是第一集团。