Как выполнить preg_match () для этой строки? - PullRequest
0 голосов
/ 09 февраля 2012

Я плохо умею делать preg_match(). Может кто-нибудь помочь мне создать preg_match() для получения последнего параметра в URL.

PHP код:

$url = "http://my.example.com/getThis";
$patern = ""; //need to create this

$result = preg_match($pattern, $url, $matches);

Спасибо!

Ответы [ 4 ]

3 голосов
/ 09 февраля 2012

Получить последний параметр?Другой способ, чем использовать preg_match, разделить символ $url на /, а затем получить последний элемент.

$url = "http://my.example.com/getThis";
$arr = explode("/", $url);

$result = $arr[count($arr) - 1];

$result будет иметь значение getThis.

1 голос
/ 09 февраля 2012

Ответы Мухаммеда Абрара Истиади и AD7six являются лучшими способами сделать работу, чем эта, и я настоятельно рекомендую использовать Explode,

Но чтобы ответить на ваш вопрос:

$url = "http://my.example.com/getThis";
$pattern = "/\/([^\/]*)$/";
preg_match($pattern, $url, $matches);
print_r($matches);`
1 голос
/ 09 февраля 2012

Не используйте регулярные выражения, когда они не нужны (особенно если они не являются вашей сильной стороной)

Все, что вам нужно:

$lastSlash = strrpos($url, '/');
$result = substr($url, $lastSlash + 1);
0 голосов
/ 09 февраля 2012

Для этого есть простая функция PHP parse_url ().

Вот 3 различных метода, последний из которых наиболее прост, используя функцию parse_url (). Первое - это простое регулярное выражение.

Второе - это то же регулярное выражение, но с добавлением имен ключей для результирующего массива.

Третий - это использование PHP функции parse_url (), которая намного проще возвращает всю вашу информацию, но действительно перехватывает «/» пути. [путь] => / getThis

Код:

echo "Attempt 1:\n\n";
$url = "http://my.example.com/getThis";
$pattern = "/(.*?):\/\/(.*?)\/(.*)/"; //need to create this
$result = preg_match($pattern, $url, $matches);
print_r($matches);

echo "\n\nAttempt 2:\n\n";
$url = "http://my.example.com/getThis";
$pattern = "/(?<scheme>.*?):\/\/(?<host>.*?)\/(?<path>.*)/"; //need to create this
$result = preg_match($pattern, $url, $matches);
print_r($matches);

echo "\n\nAttempt 3:\n\n";
$better = parse_url($url);
print_r($better);

Результаты:

Попытка 1:

Array
(
    [0] => http://my.example.com/getThis
    [1] => http
    [2] => my.example.com
    [3] => getThis
)


Attempt 2:

Array
(
    [0] => http://my.example.com/getThis
    [scheme] => http
    [1] => http
    [host] => my.example.com
    [2] => my.example.com
    [path] => getThis
    [3] => getThis
)


Attempt 3:

Array
(
    [scheme] => http
    [host] => my.example.com
    [path] => /getThis
)

Надеюсь, это поможет ^^

...