Signatur
Beschreibung
MongoDB\BSON\RegexInterface definiert den Vertrag für Objekte, die einen regulären Ausdruck im BSON-Format darstellen. BSON besitzt einen eigenen nativen Typ für reguläre Ausdrücke, der sowohl das Muster (pattern) als auch die Flags (z. B. i für case-insensitive) enthält.
Klassen, die dieses Interface implementieren, können überall dort verwendet werden, wo der MongoDB-PHP-Treiber einen BSON-Regex erwartet — also insbesondere beim Serialisieren von Abfragen und Dokumenten. Die Referenzimplementierung des Treibers ist MongoDB\BSON\Regex.
Das Interface schreibt zwei Methoden vor: getPattern() für das Regex-Muster und getFlags() für die Flags. Damit können eigene Klassen erstellt werden, die das Interface implementieren und die Regex-Daten intern anders speichern oder validieren, aber trotzdem nahtlos mit dem Treiber zusammenarbeiten.
Typischerweise wird dieses Interface verwendet, wenn man eine eigene Domain-Klasse erstellen möchte, die einen BSON-Regex repräsentiert, ohne direkt von MongoDB\BSON\Regex abzuleiten.
Beispiele
Eigene Implementierung von RegexInterface
<?php
use MongoDB\BSON\RegexInterface;
class MyRegex implements RegexInterface
{
private string $pattern;
private string $flags;
public function __construct(string $pattern, string $flags = '')
{
$this->pattern = $pattern;
$this->flags = $flags;
}
public function getPattern(): string
{
return $this->pattern;
}
public function getFlags(): string
{
return $this->flags;
}
public function __toString(): string
{
return '/' . $this->pattern . '/' . $this->flags;
}
}
$regex = new MyRegex('php', 'i');
echo $regex->getPattern() . PHP_EOL; // php
echo $regex->getFlags() . PHP_EOL; // i
echo $regex . PHP_EOL; // /php/i
Verwendung mit MongoDB\BSON\Regex in einer Datenbankabfrage
<?php
use MongoDB\BSON\Regex;
use MongoDB\Client;
$client = new Client('mongodb://localhost:27017');
$collection = $client->testdb->articles;
// Nativer BSON-Regex-Typ, der RegexInterface implementiert
$regex = new Regex('^PHP', 'i');
// Suche nach Dokumenten, deren 'title' mit 'PHP' beginnt (case-insensitive)
$cursor = $collection->find(['title' => $regex]);
foreach ($cursor as $document) {
echo $document['title'] . PHP_EOL;
}
// Wichtig · Fallstricke
Methoden des Interface:
getPattern(): string— Gibt das Regex-Muster zurück.getFlags(): string— Gibt die Flags des regulären Ausdrucks zurück (z. B.i,m,s,x).
Sicherheitshinweis: Beim Einfügen von Benutzereingaben in ein Regex-Muster sollten diese sorgfältig validiert oder escaped werden, um unerwartetes Verhalten oder eine übermäßige CPU-Last durch sogenannte ReDoS-Angriffe (Regular Expression Denial of Service) zu vermeiden.
Beachte, dass BSON-Regex-Flags sich von PHP-eigenen PCRE-Flags unterscheiden können. Nicht alle PHP-Regex-Flags sind in BSON gültig.