【问题标题】:PHP - Parse String with RegexPHP - 使用正则表达式解析字符串
【发布时间】:2011-10-14 22:48:37
【问题描述】:

我使用 php 代码获取 URI 字符串。 URI 可以是:

solution 1 - http://www.site.com/one/two/
OR
solution 2 - http://www.site.com/one/two/var_abcdefg.html
OR
solution 3 - http://www.site.com/one/two/var_abcdefg.html?var=123456
OR
solution 4 - http://www.site.com/one/two/?var=123456

我想将字符串拆分为:

solution 1:
var 1 = "http://www.site.com/one/two/";
var 2 = "";
var 3 = "";
solution 2:
var 1 = "http://www.site.com/one/two/";
var 2 = "var_abcdefg.html";
var 3 = "";
solution 3:
var 1 = "http://www.site.com/one/two/";
var 2 = "var_abcdefg.html";
var 3 = "?var=123456";
solution 4:
var 1 = "http://www.site.com/one/two/";
var 2 = "";
var 3 = "?var=123456";

我怎样才能做到?

【问题讨论】:

标签: php regex parsing


【解决方案1】:

有更快的方法:

parse_url

$input  = 'http://www.site.com/one/two/var_abcdefg.html?var=123456';
$output = parse_url($input);

array(4) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(12) "www.site.com"
  ["path"]=>
  string(25) "/one/two/var_abcdefg.html"
  ["query"]=>
  string(10) "var=123456"
}

【讨论】:

    【解决方案2】:

    不需要正则表达式,PHP 有一个内置函数可以将 url 分成几部分:parse_url()

    <?php
    $url = 'http://username:password@hostname/path?arg=value#anchor';
    
    print_r(parse_url($url));
    
    echo parse_url($url, PHP_URL_PATH);
    ?>
    

    上面的例子会输出:

    Array
    (
        [scheme] => http
        [host] => hostname
        [user] => username
        [pass] => password
        [path] => /path
        [query] => arg=value
        [fragment] => anchor
    )
    

    【讨论】:

      【解决方案3】:

      如果你真的想使用 RegEx 而不是 parse_url(),你可以试试这个:

      $url = 'http://www.site.com/one/two/var_abcdefg.html?var=123456';
      
      preg_match('#^([^?]*?)([^/?]*)(\?.*|)$#', $url, $match);
      
      $var_1 = $match[1]; // http://www.site.com/one/two/
      $var_2 = $match[2]; // var_abcdefg.html
      $var_3 = $match[3]; // ?var=123456
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        • 2019-12-10
        相关资源
        最近更新 更多