如何使用带有&符号的php sscanf

时间:2014-03-11 22:16:59

标签: php string escaping scanf ampersand

我使用php函数 sscanf 来解析字符串和extrac参数。

此代码:

$s='myparam1=hello&myparam2=world';
sscanf($s, 'myparam1=%s&myparam2=%s', $s1, $s2);
var_dump($s1, $s2);

显示:

string(20) "hello&myparam2=world" NULL

但我想在$ s1中输入 hello ,在$ s2中输入世界

任何帮助?

2 个答案:

答案 0 :(得分:0)

%s与正则表达式中的\w不等价:它不会只提取字母数字

$s='myparam1=hello&myparam2=world';
sscanf($s, 'myparam1=%[^&]&myparam2=%s', $s1, $s2);
var_dump($s1, $s2);

但在这种情况下使用parse_str()可能是更好的选择

$s='myparam1=hello&myparam2=world';
parse_str($s, $sargs);
var_dump($sargs['myparam1'], $sargs['myparam2']);

答案 1 :(得分:0)

如何使用regular expressions

以下是一个例子:

$string = 'myparam1=hello&myparam2=world';

// Will use exactly the same format
preg_match('/myparam1=(.*)&myparam2=(.*)/', $string, $matches); 
var_dump($matches); // Here ignore first result
echo("<br /><br />");

// Will match two values no matter of the param name
preg_match('/.*=(.*)&.*=(.*)/', $string, $matches); 
var_dump($matches); // Here ignore first result too
echo("<br /><br />");


// Will match all values no matter of the param name
preg_match('/=([^&]*)/', $string, $matches); 
var_dump($matches);

在所有三种情况下,matches数组都包含params。

我非常相信它会更好。 祝你好运!