简体   繁体   中英

PHP - Parse String with Regex

I grab the URI string with php code. The URI could be:

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

I would like to split the string in:

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";

How I Can make it?

There is faster way:

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"
}

No need of regex, PHP has a built-in function that breaks a url into parts : parse_url()

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));

echo parse_url($url, PHP_URL_PATH);
?>

The above example will output:

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

If you really want to use RegEx instead of parse_url() , you could try this:

$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

不要为此使用正则表达式,请参阅parse_url

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM