我在var中有一个刺痛:
$s = "track order {ordernumber}";
我得到的用户输入是:
$user_input = "track order 1234";
我想做的是我希望匹配用户'使用我已经拥有的字符串输入并提取1234
并将其保存在var $extVar['ordernumber']
我尝试使用正则表达式,但我只能匹配静态查询,并且无法从用户中提取值'字符串。
以上vars就是例如,我试图编写的代码也应该适用于这种查询。
$s = "{name} wants his order number {onb} to be {req}"
$user_input = "haseeb wants his order number 12345 to be canceled/tracked"
答案 0 :(得分:1)
您的第一个案例可以通过以下方式解决:
preg_match("/^track order (?<order>.*)/", "track order 1234", $matches);
var_dump($matches);
第二种情况可以通过以下方式解决:
preg_match(
"/^(?<name>.*) wants his order number (?<order>\d*) to be canceled\/tracked/",
"haseeb wants his order number 12345 to be canceled/tracked",
$matches
);
var_dump($matches);
答案 1 :(得分:1)
尝试这个最简单且最棘手的一个。
正则表达式: (?<=})[^{]+
1。
的负面看法(?<=})
对}
2。
以外的所有内容[^{]+
匹配除{
这将匹配}
和{
之间的所有字符串。 例如: } some words {
<?php
ini_set('display_errors', 1);
$user_input = "haseeb wants his order number 12345 to be canceled/tracked";
$string = "{name} wants his order number {onb} to be {req}";
preg_match_all("#(?<=})[^{]+#", $string, $matches);
$keys=preg_split("/".implode("|",array_map('preg_quote', $matches[0]))."/", $string);
$values=preg_split("/".implode("|",array_map('preg_quote', $matches[0]))."/", $user_input);
print_r(array_combine($keys, $values));