匹配字符串与字符串模板

时间:2017-05-18 10:37:14

标签: php

我在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"

2 个答案:

答案 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)

尝试这个最简单且最棘手的一个。

Regex demo

正则表达式: (?<=})[^{]+

  

1。 (?<=})}

的负面看法      

2。 [^{]+匹配除{

以外的所有内容

这将匹配}{之间的所有字符串。 例如: } some words {

Try this code snippet here

<?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));