Kontynuujemy prace nad parserem wykorzystującym regex. Zbliżamy się do napisania frameworka MVC. Do dzieła.
Kod z lekcji poprzedniej:
<?php
class SingleTagParser {
public static function br2br($text){
return preg_replace('/\[\/?br\]/', "</br>", $text);
}
public static function hr2hr($text){
return preg_replace('/\[\/?hr\]/', "<hr>", $text);
}
}
echo htmlspecialchars(SingleTagParser::hr2hr("<h1>Blabla</h1>[/hr]<h2>Bla</h2>[hr]"));
// <h1>Blabla</h1>
// <hr>
// <h2>Bla</h2>
// <hr>
Chcemy to uporządkować. Zacznijmy od wzorców i ich zamienników:
class SingleTagParser {
protected static $patterns = [
[
"pattern" => '/\[\/?br\]/',
"replace" => "</br>"
],
[
"pattern" => '/\[\/?hr\]/',
"replace" => "<hr>"
]
];
//(...)
}
Okej, teraz wywalamy metody br2br oraz hr2hr, zastępując je metodą searchAndReplace:
<?php
class SingleTagParser {
protected static $patterns = [
[
"pattern" => '/\[\/?br\]/',
"replace" => "</br>"
],
[
"pattern" => '/\[\/?hr\]/',
"replace" => "<hr>"
]
];
public static function searchAndReplace($source){
foreach(self::$patterns as $pattern ){
$source = preg_replace($pattern['pattern'], $pattern['replace'], $source);
}
return $source;
}
}
echo SingleTagParser::searchAndReplace("<h1>Heading</h1>[hr]<p>Para[/br]</p>[br][br][br]<p>Para</p>");
Wszystko działa jak należy. Parser będziemy rozbudowywać.