2011-12-21 2 views

ответ

1

Попробуйте это (предполагается, что формат всегда последователен в начале - символ фунта, то цифры, затем двоеточие, затем пробел, затем текст, который вы хотите):

$string='#229: Tomato Soup Menu'; 
$text = preg_replace('/^#[0-9]+: (.+)/', '$1', $string); 

Если это просто все после двоеточия пространства, и начало не соответствует, попробуйте следующее:

$string='#229: Tomato Soup Menu'; 
$text = preg_replace('/^(.*?): (.+)/', '$2', $string); 
+1

READER: Проверьте другой ответ тоже почему использовать + и не +? – David19801

+0

Для повторного факторинга. '/: (. *) /', как показано в ответе Хакре, приятно и коротко. – Nope

3

Вы используете нежадное регулярное выражение:

(.+?)* 

Это пытается соответствовать как можно меньше, что для этого выражения не всегда ничего. Попробуйте нежадный эквивалент вместо:

: (.+) 
2

регулярные выражения sscanf­Docs, как правило, легче ГРА зр и функция позволяет напрямую присвоить значение переменной:

$string='#229: Tomato Soup Menu'; 
$r = sscanf($string, "#%*d: %[^\n]", $return); 
echo $return; 

Это будет выводить Tomato Soup Menu см Demo.

Если вы предпочитаете синтаксис PCRE, символ $ соответствует концу строки (или концу строки в многострочном режиме).

$string='#229: Tomato Soup Menu'; 
preg_match_all('/: (.*)$/', $string , $arr); 

. символ не соответствует концу строки в любом случае в стандартном режиме, так что вы можете еще больше упростить картину:

$string='#229: Tomato Soup Menu'; 
preg_match_all('/: (.*)/', $string , $arr); 
Смежные вопросы