получить переменные из регулярного выражения - PullRequest
0 голосов
/ 16 марта 2019

У меня есть одна из следующих строк:

mystring
/mystring
mystring?test
/mystring?test

Это одна строка, перед которой стоит одна необязательная /, а затем и необязательная ?test

Мне нужно это получитьпеременные:

$string = "mystring"
$test = false / true depending if ?test is present

Я пытаюсь использовать регулярные выражения, но у меня проблемы с правильным шаблоном.Я пытаюсь:

\/?(\w+)(\??\w+)

Например, для "mystring", я получаю это:

Array
(
    [0] => /mystring
    [1] => mystrin
    [2] => g
)

Это пример кода:

<?
echo "<pre>";

$input = "/mystring";

$pattern = "/\/?(\w+)(\??\w+)/";

$matches = null;

preg_match($pattern, $input, $matches);

print_r($matches);
?>

Ответы [ 2 ]

1 голос
/ 16 марта 2019

Для альтернативы без регулярных выражений, если вы заинтересованы, вы можете использовать parse_url.Он принимает частичные URL-адреса и может анализировать подобные строки.

$components = parse_url($input);

$string - это путь с удаленной косой чертой, а $test - это равенство запроса строке «test».

$string = trim($components['path'], '/');
$test = isset($components['query']) && $components['query'] == 'test';
0 голосов
/ 16 марта 2019

Вы включаете ? в выражение catch.

Регулярное выражение, которое вы должны использовать: \/?(\w+)\??(\w+)?

Это будет использовать меньшее количество шагов (46 по сравнению с 56 из вашего регулярного выражения), следовательно, меньше нагрузки на сервер.

Демо: https://regex101.com/r/98QNeh/2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...