在最后一个斜杠之后和问号之前获取字符串的正则表达式

时间:2012-07-06 06:39:46

标签: regex

实施例 url = http://www.example.com/aa/bb/cc/dd?q=ab&c=1

所以在这个网址中,我需要得到最后一个斜杠之后和问号之前的值dd

如何为该

编写正则表达式

我已经编写了在最后一个斜杠后获取值但是无法弄清楚如何在查询字符串之前获取唯一值“dd”。

正则表达式:[^ /] + $

3 个答案:

答案 0 :(得分:4)

您可以使用以下正则表达式。此正则表达式将匹配?后面的所有字母表。在您的情况下,它将是dd

编辑:更新了正则表达式以使用\w而不仅仅是字母表。

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

<强>释

[^\/] -- Do not match /
[\w]+ -- match word characters (letters, digits, underscore) 
(?=\?) -- Positive lookahead: Match alphabets(above condition) that are followed by a ?

答案 1 :(得分:3)

这会有效,它在技术上得到'/'和'?'之间的任何东西。你可能不得不逃避'/',但是我没有看到它在你的身上逃脱,所以我把它保留了未转义。

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

答案 2 :(得分:0)

#(.*)/(.*)\?(.*)#

由于我不确定您使用的是哪种语言,我已将此文写入PHP工作。对于你正在使用的任何语言来说,不应该很难适应。

正则表达式的细分:

  • # - 正则表达式的开始和结束符号。
  • (.*)/ - 在网址中的最终/之前匹配之前的任何内容
  • (.*)\? - 匹配最终/?之前的内容。
  • 跟踪(.*)# - 匹配?后面的任何内容,通常是查询字符串。

当然,正则表达式可能更短,但是这样,如果你觉得合适,你也可以使用获得的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)

正如您所看到的,正则表达式有效。