У меня есть некоторые данные, которые я обрабатываю в Perl, и в ближайшее время будут добавлять все более и более отформатированные данные. То, что я хотел бы сделать, это написать простую в использовании функцию, чтобы я мог передать строку и регулярное выражение, и оно вернет что-нибудь в круглых скобках. Это было что-то вроде этого (псевдокод) работы:Соответствующие n круглых скобок в perl regex
sub parse {
$data = shift;
$regex = shift;
$data =~ eval ("m/$regex/")
foreach $x ($1...$n)
{
push (@ra, $x);
}
return \@ra;
}
Тогда я мог бы назвать это так:
@subs = parse ($data, '^"([0-9]+)",([^:]*):(\W+):([A-Z]{3}[0-9]{5}),ID=([0-9]+)');
Как вы можете видеть, есть несколько проблем с этим кодом. Я не знаю, будет ли eval работать, «foreach» определенно не сработает, и, не зная, сколько скобок есть, я не знаю, сколько раз цикл.
Это слишком сложно для разделения, поэтому, если есть еще одна функция или возможность, которую я пропускаю, дайте мне знать.
Благодарим за помощь!
Если вы не знаете, имеет ли регулярное выражение парс или нет, и не хотите возвращать ничего, если это не так (вместо стандартной строки по умолчанию), добавьте дополнительный набор: '$ string = ~/(regex) /' и отбросить его от результатов. – ysth
Этот grep будет фильтровать парны, которые фактически не используются в матче, но не нулевые (которые будут определены и «») – ysth
@ysth => вы правы, исправлены. –