从正则表达式中获取变量

时间:2019-03-15 22:23:27

标签: php regex

我有以下字符串之一:

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 个答案:

答案 0 :(得分:1)

如果您有兴趣使用非正则表达式替代方法,可以使用parse_url。它接受部分URL,并且可以解析诸如此类的字符串。

$components = parse_url($input);

$string是除去前斜杠的路径,而$test是查询与字符串'test'的相等性。

$string = trim($components['path'], '/');
$test = isset($components['query']) && $components['query'] == 'test';

答案 1 :(得分:0)

您要将?包含在catch表达式中。

您应使用的正则表达式:\/?(\w+)\??(\w+)?

这将使用较少的步骤(与regex的56个步骤相比,减少了46个步骤),因此也减轻了服务器的负载。

演示:https://regex101.com/r/98QNeh/2