Musterbegriff für preg_match() gesucht


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

tklustig

Erfahrenes Mitglied
#1
Hallo Leute,
ich benötige einen Musterbegriff, genauer ein Platzhalter dafür. Folgender Code steht zur Verfügung
PHP:
.
.
                $suchmuster0 = '/image/';
                $suchmuster1 = '/sound/';
                $suchmuster2 = '/video/';
                if (!preg_match($suchmuster0, $fileSysName) && !preg_match($suchmuster1, $fileSysName) && !preg_match($suchmuster2, $fileSysName)) {
                    file_put_contents($attachment->filePath, $data);
                    if (!isset($_SESSION['Attachement'])) {
                        $_SESSION['Attachement'] = array();
                    }
                    $_SESSION['Attachement'][] = $id;
.
.
                }
Eigentlich soll die preg_match-Funktion all diejenigen Dateien ausschließen, die im Namen image, sound oder video haben. Es klappt allerdings nicht. Ich benötige einen Platzhalter, so dass alle Dateien, die im Dateinamen die genannten Begriffe haben, ausgeschlossen werden. In SQL würde das so gehen:
SQL:
SELECT id FROM table WHERE column LIKE "%image%" OR column LIKE "%video%" OR column LIKE "%sound%";
 

Sempervivum

Erfahrenes Mitglied
#2
Deine Version funktioniert einwandfrei, wenn ich diesen Testcode verwende:
PHP:
function check($subject)
{
    $suchmuster0 = '/image/';
    $suchmuster1 = '/sound/';
    $suchmuster2 = '/video/';
    $suchmuster = '/(image|sound|video)/';
    // if (!preg_match($suchmuster0, $subject) && !preg_match($suchmuster1, $subject) && !preg_match($suchmuster2, $subject)) {
    if (!preg_match($suchmuster, $subject, $matches)) {
        echo "no match for $subject<br>";
        // if (!isset($_SESSION['Attachement'])) {
        //     $_SESSION['Attachement'] = array();
        // }
        // file_put_contents($attachment->filePath, $data);
        // $_SESSION['Attachement'][] = $id;
    } else {
        echo "match = $matches[0] for $subject<br>";
    }
}
check("owhimagelwhmr");
check("owhsoundlwhmr");
check("owhvideolwhmr");
check("owhowhnrlwhmr");
Deine Version ist das auskommentierte if. Wie Du siehst, kann man es etwas kompakter mit nur eine Regex formulieren.
 

tklustig

Erfahrenes Mitglied
#3
Okay. Die zu durchsuchende Datei war bei mir verkehrt. Muss korrekterweise $data, nicht
$fileSysName codiert werden, damit es klappt. Habe jetzt Deine verkürzte Version übernommen. Danke dafür !
 

Sempervivum

Erfahrenes Mitglied
#4
PHP:
Ich möchte, dass auch Dateien wie beispielsweise sound010.jpg ausgeschlossen werden.
IMO Werden sie das schon:
PHP:
function check($subject)
{
    $suchmuster0 = '/image/';
    $suchmuster1 = '/sound/';
    $suchmuster2 = '/video/';
    $suchmuster = '/(image|sound|video)/';
    // if (!preg_match($suchmuster0, $subject) && !preg_match($suchmuster1, $subject) && !preg_match($suchmuster2, $subject)) {
    if (!preg_match($suchmuster, $subject, $matches)) {
        echo "no match for $subject; Begriff wird einbezogen<br>";
        // if (!isset($_SESSION['Attachement'])) {
        //     $_SESSION['Attachement'] = array();
        // }
        // file_put_contents($attachment->filePath, $data);
        // $_SESSION['Attachement'][] = $id;
    } else {
        echo "match = $matches[0] for $subject; Begriff wird ausgeschlossen<br>";
    }
}
check("owhimagelwhmr");
check("owhsoundlwhmr");
check("owhvideolwhmr");
check("owhowhnrlwhmr");
check("sound10.jpg");
liefert die Ausgabe:
match = image for owhimagelwhmr; Begriff wird ausgeschlossen
match = sound for owhsoundlwhmr; Begriff wird ausgeschlossen
match = video for owhvideolwhmr; Begriff wird ausgeschlossen
no match for owhowhnrlwhmr; Begriff wird einbezogen
match = sound for sound10.jpg; Begriff wird ausgeschlossen
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…