正则表达式:在URL
问题描述:
如发现斜线和匹配关键词的词:正则表达式:在URL
http://www.domain.com/junk/target/keyword/junk
我想从上面的网址抠字眼“目标”。 到目前为止,我有以下表现:
(?=\/).*?(?=\/keyword\/)
然而,这一切拉从第一个斜杠(“//www.domain.com/junk/target”)
答
您可以使用
%r{/([^/]+)/keyword/}
见Rubular demo(注意,如果keyword
可以在字符串的结尾出现,则需要在最后添加的交替 - %r{/([^/]+)/keyword(?:/|\z)}
)。
所需要的值是内部组1.
lnk[%r{/([^/]+)/keyword/}, 1]
模式描述:
-
/
- 斜线 -
([^/]+)
- 捕获组1匹配一个或多个字符除/
-
/keyword/
- 字面/keyword/
子串。
+1
您可以使用%r文字来使其更具可读性。 %R {/([^ /] +)/关键字/} – Joshua
答
您可以使用一个否定的字符类在与正超前组合:
[^\/]+(?=\/keyword)
说明:
-
[^\/]+
- 与一个或多个字符匹配的否定字符集/
字符 -
(?=\/keyword)
- 正向前瞻以匹配以下/keyword
字符串。
当然你也可以只使用一个捕获组:
\/([^\/]+)\/keyword
字符串target
将是第一集团。
你的正则表达式失败的原因是'\ /'将匹配字符串中的第一个'/','。*?'将匹配任何0+字符直到'/ keyword /',因此包括任何'/'它在路上发现。在这种情况下,否定字符类'[^ /]'是最简单的修复方法。 –