Как сопоставить пустую строку - PullRequest
2 голосов
/ 14 декабря 2011

Я пытаюсь разделить переменную на основе пустой строки. переменная

$s = "iSCSI cred number=0
name=match1
string=2
name=number1

iSCSI cred number=1
name=match2
string=3
name=number2

iSCSI cred number=2
name=match3
string=4
name=number3";

Ответы [ 5 ]

3 голосов
/ 14 декабря 2011

Множество хороших ответов о том, как поступить со строкой, которая у вас есть. Но давайте попробуем угадать, какой вопрос вы должны задать.

Как читать в файле по абзацам? - который просто является часто задаваемым вопросом .

Если вы читаете эти данные из файла, вам лучше будет их правильно проанализировать, когда вы их прочитаете.

#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

local $/ = '';

while (<DATA>) {
  say "Record number $. is:\n$_";
}

__DATA__
iSCSI cred number=0
name=match1
string=2
name=number1

iSCSI cred number=1
name=match2
string=3
name=number2

iSCSI cred number=2
name=match3
string=4
name=number3

Это, конечно, просто предположение о том, что вы пытаетесь сделать. Если я далеко от цели, пожалуйста, не обращай на меня внимания.

3 голосов
/ 14 декабря 2011

Если «пустые» строки содержат пробелы, вы можете сделать:

split/\n+\s*\n+/, $s;

или, чтобы быть совместимым с юникодом:

split/\R+\s*\R+/, $s;
3 голосов
/ 14 декабря 2011

В этом нет ничего:

my @split_values = split/\n\n/, $s

В качестве альтернативы вы можете разделить несколько пробельных символов с положительным взглядом на строку iSCSI:

my @split_values = split/\s+(?=iSCSI)/, $s;

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

2 голосов
/ 14 декабря 2011
my @arr = split(/[\n]{2,}/,$s);
2 голосов
/ 14 декабря 2011

Использовать разделение с \ n \ s в качестве разделителя,

my  @arr =  split('\n\s',$s);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...