Files
iblogs/src/Filter/RegexFilter.php
Sam Kintop bf3870ccca
Some checks failed
Publish Docker Image / build-and-push (push) Failing after 2m13s
all
2026-04-30 09:44:02 -05:00

59 lines
1.3 KiB
PHP

<?php
namespace Aternos\Mclogs\Filter;
use Aternos\Mclogs\Filter\Pattern\Pattern;
use Aternos\Mclogs\Filter\Pattern\PatternWithReplacement;
abstract class RegexFilter extends Filter
{
/**
* @return PatternWithReplacement[]
*/
abstract protected function getPatterns(): array;
/**
* @return Pattern[]
*/
protected function getExemptions(): array
{
return [];
}
/**
* @inheritDoc
*/
public function getType(): FilterType
{
return FilterType::REGEX;
}
/**
* @inheritDoc
*/
public function getData(): array
{
return [
"patterns" => $this->getPatterns(),
"exemptions" => $this->getExemptions(),
];
}
/**
* @inheritDoc
*/
public function filter(string $data): string
{
foreach ($this->getPatterns() as $pattern) {
$data = preg_replace_callback($pattern->get(), function ($matches) use ($pattern) {
foreach ($this->getExemptions() as $exemptionPattern) {
if (preg_match($exemptionPattern->get(), $matches[0])) {
return $matches[0];
}
}
return $pattern->getReplacement();
}, $data);
}
return $data;
}
}