我有以下字符串之一:
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);
?>
答案 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个步骤),因此也减轻了服务器的负载。