Я нашел эту идею в фигурном парсере онлайн, и я хочу ее развить. Оригинальный парсер предназначен для передачи youtube.php: написание фигурного парсера
class curly
{
/**
* Replace the macros in an input string
* @param string $input
* @return string
*/
public function replace ($input) {
//return preg_replace("/\{{2}([a-z]+\|.+)\}{2}/Ue",'$this->_replace("\\1")',$input); // original
return preg_replace("/\{{2}(([a-z]+\|.+)|([a-z\_]))\}{2}/Ue",'$this->_replace("\\1")',$input);
}
/**
* Run the replacement code on a given macro string
* @param string $input
* @return string
*/
private function _replace ($input) {
print_r($input);
list ($name,$params) = explode("|",$input);
if (method_exists($this,$name)) {
return $this->$name($params);
}else{
if($input === 'email_compnay') return '[email protected]';
else if($input === 'email_personal') return '[email protected]';
}
throw new Exception ("Unrecognised macro: {$name}.",500);
}
/**
* Replaces a YouTube curly
* @param string $params
* @return string
*/
private function youtube ($params) {
parse_str($params);
// set defaults
if (!isset($id)) { $id = "ykwqXuMPsoc"; }
if (!isset($width)) { $width = 560; }
if (!isset($height)) { $height = 315; }
// output the final HTML
return "<iframe width=\"{$width}\" height=\"{$height}\" src=\"http://www.youtube.com/embed/{$id}\" frameborder=\"0\" allowfullscreen></iframe>";
}
}
пример использования, который работает,
$curly = new curly();
$input = '<p>{{youtube|id=ykwqXuMPsoc&width=560&height=315}}</p>';
echo $curly->replace($input);
// return <p><iframe width="560" height="315" src="http://www.youtube.com/embed/ykwqXuMPsoc" frameborder="0" allowfullscreen></iframe></p>
другой пример, который не работает,
$input = '<p>{{email_company}}</p>';
echo $curly->replace($input);
// return <p>{{email_company}}</p>
когда {{email_company}}
тогда он должен вернуть [email protected]
, но это дает мне {{email_company}}
вместо .. .
Это что-то hing не правильно в этом регулярном выражении?
"/\{{2}(([a-z]+\|.+)|([a-z\_]))\}{2}/Ue"
Я сожалею, но то, что вы пытаетесь сделать точно. Я не знаю PHP, но я могу помочь с регулярным выражением, если я знаю, чего вы пытаетесь достичь именно? –
спасибо. Я думаю, мне нужно регулярное выражение, которое может захватить 'email_company' или' youtube | id = ykwqXuMPsoc & width = 560 и height = 315' из двойных фигурных скобок. Является ли это возможным? – laukok
текущее регулярное выражение только захватывает 'youtube | id = ykwqXuMPsoc & width = 560 & height = 315', но не' email_company' ... – laukok