简体   繁体   中英

PHP preg_match regular expression for find date in string

I try to make system that can detect date in some string, here is the code :

$string = "02/04/16   10:08:42";
$pattern = "/\<(0?[1-9]|[12][0-9]|3[01])\/\.- \/\.- \d{2}\>/";
$found = preg_match($pattern, $string);
            if ($found) {
                echo ('The pattern matches the string');
            } else {
                echo ('No match');
            }

The result i found is "No Match", i don't think that i used correct regex for the pattern. Can somebody tell me what i must to do to fix this code

First of all, remove all gibberish from the pattern. This is the part you'll need to work on:

(/0?[1-9]|[12][0-9]|3[01]/)

(As you said, you need the date only, not the datetime).

The main problem with the pattern, that you are using the logical OR operators ( | ) at the delimiters. If the delimiters are slashes, then you need to replace the tube characters with escaped slashes ( / ). Note that you need to escape them, because the parser will not take them as control characters. Like this: \\/ .

Now, you need to solve some logical tasks here, to match the numbers correctly and you're good to go. (I'm not gonna solve the homework for you :) )

These articles will help you to solve the problem tough:

Good luck!

In your comment you say you are looking for yyyy, but the example says yy.
I made a code for yy because that is what you gave us, you can easily change the 2 to a 4 and it's for yyyy.

preg_match("/((0|1|2|3)[0-9])\/\d{2}\/\d{2}/", $string, $output_array);
Echo $output_array[1]; // date

Edit:

If you use this pattern it will match the time too, thus make it harder to match wrong.
((0|1|2|3)[0-9])/\\d{2}/\\d{2}\\s+\\d{2}:\\d{2}:\\d{2}

http://www.phpliveregex.com/p/fjP

Edit2:

Also, you can skip one line of code.
You first preg_match to $found and then do an if $found.
This works too:

If(preg_match($pattern, $string, $found))}{
    Echo $found[1];
}Else{
    Echo "nothing found";
}

With pattern and string as refered to above.
As you can see the found variable is in the preg_match as the output, thus if there is a match the if will be true.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM