Jump to content

Archived

This topic is now archived and is closed to further replies.

Moon-Man.net

preg_match && preg_quote help

Recommended Posts

Hey,
I have this script that is ment to replace move any files that contain charactures that are in the preg_quote part.
But i can never get it to match. i get this output

[quote]
File found: "BAD??BAD::
File found: BAD:
File found: TESTINGDIR
File found: TESTINGFILE
File found: .
File found: BAD?
File found: ..
[/quote]

And there are obviousally charactures in there that are ment to match the the string. Help?
[code]
#!/usr/bin/php
<?PHP
$dir = '/tmp/TESTING/';
$handle = opendir($dir);
$cnt=0;

echo "Starting Replace!\n" ;
while(($file = readdir($handle)) !== false){
// echo "File found: " .$file ."\n";
    if (preg_match('/' .preg_quote('\/ : * ? " < > |', '/') .'/', $file)){
echo "Match Found: " .$file ;
$cnt++
        $path = $dir . DIRECTORY_SEPARATOR . $file;
        if (!in_array($file, array('..', '.')) && is_file($path)){
            $contents = file_get_contents($path);
            $newPath = $dir . DIRECTORY_SEPARATOR . preg_replace('/' . preg_quote('\/ : * ? " < > |', '/') . '/', '_', $file);
            if (file_put_contents($newPath, $contents) !== false){
                $unlink($path); //delete old file only if able to create new
            }
        }
    }
}
echo "Replace finnished" ;
echo "There were " .$cnt ." Replacements Made" ;
?>
[/code]

Thanks in advance :)
Nathan

Share this post


Link to post
Share on other sites
You're using a string of characters instead of a character class. Try adding a[tt] [ [/tt]after your starting delimiter, and a[tt] ] [/tt]after your ending.

Share this post


Link to post
Share on other sites
[quote]Try adding a [ after your starting delimiter, and a ] after your ending.[/quote]

The[tt] ] [/tt]should have been [i]before[/i] your ending delimiter. Can you show me the relevant code change?

Share this post


Link to post
Share on other sites
whoops... that was my bad (I recognise the script :p)

change to:
[code]<?php if (preg_match('/[' .preg_quote('\/:*?"<>|', '/') .']+?/', $file)) { ?>[/code]

obviously without the <?php ?> tags.

ditto for the preg_replace.

Share this post


Link to post
Share on other sites

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.