preg_match ключ и дата из строки - PullRequest
0 голосов
/ 11 декабря 2011

Я работаю над проектом, который включает в себя тип кэширования. Для ситуаций, основанных на разных именах кеша, можно создать несколько кешей. В файлах я пишу кеш так:

{cache:2011-12-11 02:01:47}

И когда я ищу это, я пытаюсь preg_match это так:

$match = "{cache:/\d{4}\-\d{2}\-\d{2} \d{2}:\d{2}:\d{2}/}";
$str = 'FIND ME! {cache:2011-12-11 02:01:47}';
if (preg_match($match, $str, $matches)) { 
 print "it's a match"; 
    print_r($match);
}

Проблема в том, что он никогда не находит это. Но это сработает, если я сделаю:

$match = "/\d{4}\-\d{2}\-\d{2} \d{2}:\d{2}:\d{2}/";

Что я делаю не так с моим утверждением preg_match? И есть ли какой-нибудь тип поиска строк, который я мог бы использовать быстрее, чем preg_match?

1 Ответ

2 голосов
/ 11 декабря 2011

Ваше регулярное выражение в коде не будет работать, потому что вы копируете и вставляете разделители, где они не принадлежат:

 $match = "{cache:/\d{4}\-\d{2}\-\d{2} \d{2}:\d{2}:\d{2}/}";
                  ^                                     ^
                Eeek!                                 Eeek!

Таким образом, ваши { и } становятся разделителями регулярных выражений, авнутренние косые черты были интерпретированы как буквальные символы для поиска.

Скорее, это должно было быть:

 $match = "/\{cache:\d{4}\-\d{2}\-\d{2} \d{2}:\d{2}:\d{2}}/";

Обратите внимание также на экранированный ведущий \{ вьющийся.

...