Общий шаблон совпадения PHP со строкой - PullRequest
0 голосов
/ 21 января 2011

есть ли функция, которая позволит мне делать следующее:

$template = "{name}:{city}-{state}"
$string = "Tom:Some CityPlace-CA"

$out = function_I_am_looking_for($template,$string);

когда $ out возвращает

Array(
    [name] => Tom
    [city] => Some CityPlace
    [state] => CA
)

Существует ли такая функция?

-------- РЕДАКТИРОВАТЬ -----------

Так что люди говорили, и так как я не люблю видеть что-то вроде этого, я сделаю вывод.Никакой встроенной функции не существует, однако я ее смоделировал, и она работает.Не стесняйтесь уточнять, пожалуйста, комментируйте ваши изменения.

function genaric_match($template,$string,$varStart="{{",$varEnd="}}"){


  $template = str_replace($varStart,"|~|`",$template);
  $template = str_replace($varEnd,"`|~|",$template);

  $t=explode("|~|",$template);

  $temp="";
  $i=0;
  foreach ($t as $n=>$v){
    $i++;
    if (($i==count($t)||($i==(count($t)-1)&&$t[$n+1]==""))&&substr($v,0,1)=="`"&&substr($v,-1)=="`"){
      //Last Item
      $temp.="(?P<".substr($v,1,-1).">.++)";

    }elseif(substr($v,0,1)=="`"&&substr($v,-1)=="`"){
      //Search Item
      $temp.="(?P<".substr($v,1,-1).">[^".$t[$n+1]."]++)";

    }else{
      $temp.=$v;
    }

  }
  $temp="~^".$temp."$~";

  preg_match($temp, $string, $matches);

  return $matches;

}

Этот пример

print_r(genaric_match("{{name}}:{{city}}-{{state}}","Tom:Some CityPlace-CA"));

Возвращает

Array
(
    [0] => Tom:Some CityPlace-CA
    [name] => Tom
    [1] => Tom
    [city] => Some CityPlace
    [2] => Some CityPlace
    [state] => CA
    [3] => CA
)

Ответы [ 2 ]

3 голосов
/ 21 января 2011

Да, это называется preg_match.Но вам, очевидно, нужно написать регулярное выражение для этого.(Если ваш вопрос заключается в том, существует ли волшебная функция распознавания любого шаблона, даже не зная его синтаксиса, то ответ будет: Нет.)

preg_match('~^(?P<name>[^:]++):(?P<city>[^-]++)-(?P<state>.++)$~', $string, $matches);
var_dump($matches);
0 голосов
/ 21 января 2011

В PHP нет такой функции "из коробки", но написать ее было бы довольно тривиально, так как есть довольно много функций, таких как ...

...что вы можете использовать для его создания.

Однако нужно сказать, что использование PHP (который в значительной степени является языком шаблонов) для создания другого языка шаблонов кажется странным выбором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...