Perl Pattern Matching извлекает внутренние скобки

Мне очень нужна помощь в поиске решения для сопоставления с образцом...

Если строка <6>[ 84.982642] Killing the process

Как я могу извлечь их в три отдельные строки... Мне нужна одна для 6, 84.982642 и Killing the process.. Я пробовал много вещей, но эти скобки и пробелы действительно меня смущают, и я продолжаю получать сообщение об ошибке

"WARNING: Use of uninitialized value $bracket in pattern match..."

Можно ли как-то так написать

($num_1, $num_2, $name_process) = split(/[\-,. :;!?()[\]{}]+/);

Не знаю, как их извлечь..

Помогите, пожалуйста? Большое спасибо


person janggirl    schedule 06.11.2013    source источник


Ответы (1)


Предполагая, что вход находится в $_

($num_1, $num_2, $name_process) = /^<(\d+)>\[([^\]]+)\]\s+(.*)$/;

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

($num_1, $num_2, $name_process) = /^<([^>]+)>\[([^\]]+)\]\s+(.*)$/;

Объяснение:

<([^>]+)> - левая угловая скобка следует за одним или несколькими символами, которые не являются правой угловой скобкой, за которой следует правая угловая скобка.

\[([^\]]+)\] - левая скобка, за которой следует один или несколько символов, не являющихся правой скобкой, за которой следует правая скобка

\s+(.*) - один или несколько пробелов, затем захватите все, начиная с первого непустого после этого.

person Jim Garrison    schedule 06.11.2013
comment
не могли бы вы объяснить, как вы смогли это получить? - person janggirl; 06.11.2013
comment
я добавил объяснение - person Jim Garrison; 06.11.2013
comment
Большое спасибо, я попробую! - person janggirl; 06.11.2013
comment
Интересно, что $num_1 ничего не захватывал. Все начиналось с $num_2, а это означало, что мне нужна была еще одна переменная, чтобы получить последнее сообщение. Не знаю, почему. Спасибо! - person janggirl; 07.11.2013