2012-02-27 2 views
0

После нескольких часов, пытаясь обернуть мою голову вокруг сопоставления с образцом, я выбрасываю полотенце в и, обращаясь к экспертам ...RegEx шаблон Справка (PHP)

У меня есть файл журнала, который я пытаюсь для извлечения строки из.

Формат как:

12:00 SomeText: 
1:20 MoreText: 

"SOMETEXT/MoreText" является то, что мне нужно получить. Я придумал ниже код, но ничего не получаю рядом результатов я ожидал:

$string = "12:00 SomeText: blah, blah, blah not important"; 
$regex = '/[0-9]:[0-9] (.*?)\: /'; 
$entity = preg_split($regex, $string); 

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

Толчок в правильном направлении был бы признателен!

Благодаря Chris

+0

Разместите расширенный формат, который вы получили? Что такое разделители? Пробелы, вкладки ...? – m0skit0

ответ

3

Вы соответствие одной цифры, двоеточие, затем одна цифра.

$string = "12:00 SomeText: blah, blah, blah not important"; 
$regex = '/[0-9]+:[0-9]+ ([^:]+)/'; 
$entity = array(); 
preg_match($regex, $string, $entity); 

Это будет соответствовать одной или нескольким цифрам, двоеточию, одной или нескольким цифрам, остальным. preg_match поставит все выражение соответствия (12:00 Some Text) в положении 0, и совпавшие подвыражения (Some Text) после того, так что ваш «Some Text» будет в $entity[1]

[Edit] После обсуждения в комментариях я улучшил сопоставление с заголовком. Раньше вы были

(.*?)\: 

, который будет найти любой символ, до конца строки, необязательно, а затем возвращаться назад, пока он не находит двоеточие. Я заменил его

([^:]+) 

, который найдет один или несколько символов, которые не являются двоеточиями и соответствуют им. Это избавляет регулярное выражение от «бла-бла-бла-бла ...», а затем игнорирует то, что оно только что нашло.

+1

избил меня. хотя я не понимаю, почему вторая двоеточие сбежала. –

+0

Я думал, что у него это было, потому что он хотел только заголовок, часть между временем и двоеточием, действующим как разделитель заголовков. @Chris Sprague, если вы можете пояснить это, я могу сделать регулярное выражение немного более эффективным. –

+0

Действительно, я пытаюсь захватить только часть «SomeText» строки. –

Смежные вопросы