2015-02-10 2 views
0

Я следующий текст в виде строки с именем $ тест:регулярное выражение не суметь без ошибок

Content-Type: text/plain 
Server: testapp (4.2.1 (x86_64/linux)) 
Content-Length: 125 

{"password":"123","email_address":"","name":"j.doe","username":"jd123"} 

Я пытаюсь написать регулярное выражение в PHP, который будет возвращать все после того, как Content-Length: 125. Вот что я до сих пор:

if (preg_match('/^Content\-Length\:[0-9\\n]+([a-zA-Z0-9\{\}\"\:])*/',$test,$result)) 
{ 
     var_dump($result[1]); 
} 

Я не получаю никаких сообщений об ошибках, но не находит шаблон я определил в моей строке. Я также попробовал этот шаблон:

'/^Content\-Length\:[0-9\\n]+([a-zA-Z0-9{}\"\:])*/' 

, где я попытался удалить побег символ Infront из фигурных скобок. Но это все равно.

Можете ли вы сказать мне, что мне не хватает? Спасибо.

EDIT 1

мой код теперь выглядит следующим образом:

<?php 
$test = "Content-Type: text/plain 
Server: kamailio (4.2.1 (x86_64/linux)) 
Content-Length: 125 

{"password":"test123","email_address":"","name":"j.doe","username":"jd123"}"; 

//if (preg_match('/Content-Length\:[0-9\\n]*([a-zA-Z0-9{}\"\:])*/',$test,$result)) 
//{  
//   var_dump($result); 
//} 

preg_match('/({.*})/', $str, $matches); 
echo $matches[0]; 
?> 

Это дает мне следующее сообщение об ошибке:

Undefined offset: 0 in /var/www/html/test/test.php on line 31

Line 31, где я пытаюсь повторить матчей.

+0

в вашем редактирования вы проверяете для '$ str' вместо' $ test' который не соответствует ни одному – Cfreak

+0

И вы должны видеть другие ошибки, потому что вы выходите из строки. Повторите мой ответ еще раз ... –

+0

у вас есть непревзойденные пробелы после буквального. Добавить место после первого: в вашем регулярном выражении. –

ответ

0
$str = <<<HEREDOC 
Content-Type: text/plain 
Server: testapp (4.2.1 (x86_64/linux)) 
Content-Length: 125 

{"password":"123","email_address":"","name":"j.doe","username":"jd123"} 
HEREDOC; 

preg_match('/(\{.*\})/', $str, $matches); 

echo $matches[0]; 

Регулярное выражение здесь просто соответствие строку, которая начинается с { и заканчивается }. Однако это быстрое и свободное регулярное выражение.

+0

, который, похоже, не работает ... см. Мое редактирование 1. спасибо! – Happydevdays

+1

вы должны объяснить, что это делает. Кроме того, это не очень хорошее регулярное выражение по многим причинам. – Cfreak

+0

Вам необходимо избегать фигурных скобок как минимум. – chris85

0

Вместо того, чтобы использовать большой шаблон для соответствия всем (что является timeconsuming) - почему бы не использовать preg_split, чтобы вырезать свою строку на две части в нужное вам место?

$string = 'Content-Type: text/plain 
    Server: testapp (4.2.1 (x86_64/linux)) 
    Content-Length: 125 

    {"password":"123","email_address":"","name":"j.doe","username":"jd123"}'; 

$parts = preg_split ("/Content-Length:\s*\d+\s*/", $string); 

echo "The string i want is '" . $parts[1] . "'"; 

Выход:

The string i want is '{"password":"123","email_address":"","name":"j.doe","username":"jd123"}' 
0

Вы можете избежать регулярных выражений в целом, так как заголовок HTTP всегда отделяется от тела ответа от 2 consecutives разрывов строк.

list($headers, $body) = explode("\n\n", $string); 

Или перерывы окна стиля (которые, кстати, являются стандартными для HTTP-заголовков):

list($headers, $body) = explode("\r\n\r\n", $string); 
Смежные вопросы