示例网址 = http://www.example.com/aa/bb/cc/dd?q=ab&c=1
所以在这个网址中,我需要在最后一个斜杠之后和问号之前的值 dd
如何为此编写正则表达式
我已经写了在最后一个斜杠之后获取值,但无法弄清楚如何在查询字符串之前获取唯一的值“dd”。
正则表达式:[^/]+$
示例网址 = http://www.example.com/aa/bb/cc/dd?q=ab&c=1
所以在这个网址中,我需要在最后一个斜杠之后和问号之前的值 dd
如何为此编写正则表达式
我已经写了在最后一个斜杠之后获取值,但无法弄清楚如何在查询字符串之前获取唯一的值“dd”。
正则表达式:[^/]+$
您可以使用下面的正则表达式。此正则表达式将匹配所有后跟?
. 在您的情况下,它将是dd
.
编辑:更新正则表达式以使用\w
而不仅仅是字母。
[^\/][\w]+(?=\?)
解释
[^\/] -- Do not match /
[\w]+ -- match word characters (letters, digits, underscore)
(?=\?) -- Positive lookahead: Match alphabets(above condition) that are followed by a ?
这将起作用,从技术上讲,它可以获取“/”和“?”之间的任何内容。您可能必须转义“/”,但我没有看到它在您的中转义,所以我没有转义。
/([^/\?]+)\?
#(.*)/(.*)\?(.*)#
由于我不确定您使用的是什么语言,所以我写了这个来为 PHP 工作。适应您正在使用的任何语言应该不难。
正则表达式的细分:
#
- 正则表达式的开始和结束符号。(.*)/
- 匹配url中 final之前的任何内容。/
(.*)\?
- 匹配最后/
和之前之间的内容?
。(.*)#
- 匹配 后面的任何内容?
,通常是查询字符串。当然,正则表达式可以更短,但是这样,如果您认为合适,您还可以使用所获得 URL 的其他详细信息。
编辑
我已使用此代码,以及您提供的示例 URL:
<?php
$url = "http://www.abc.com/aa/bb/cc/dd?q=ab&c=1";
$regex = "#(.*)/(.*)\?(.*)#";
preg_match_all($regex, $url, $matches);
var_dump($matches);
?>
这是它返回的内容:
array
0 =>
array
0 => string 'http://www.abc.com/aa/bb/cc/dd?q=ab&c=1' (length=39)
1 =>
array
0 => string 'http://www.abc.com/aa/bb/cc' (length=27)
2 =>
array
0 => string 'dd' (length=2)
3 =>
array
0 => string 'q=ab&c=1' (length=8)
如您所见,正则表达式有效。