2017-06-22 7 views
-3

以下の入力は、$ var1という名前の単一のスカラー変数に格納されています。スペースを新しい行に変換するには?

入力(すなわち$ VAR1に格納されている)

Gain Dead_coverage Export_control Functional_coverage Function_logic top dac_decoder Datapath System_Level Black_DV Sync_logic temp1 temp2 temp3 temp4 temp5 temp6 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 

予想される出力:

Gain 
Dead_coverage 
Export_control 
Functional_coverage 
Function_logic 
top 
dac_decoder 
Datapath 
System_Level 
Black_DV 
Sync_logic 
temp1 
temp2 
temp3 
temp4 
temp5 
temp6 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 

マイコード:

私は、次の正規表現をしようとしました。

$var1=tr{\s}{\n}; 

上記の正規表現は期待された出力をもたらしません。

注:数字はn個までの数字になる場合があります。文字は大文字または小文字で始まり、終わる場合があります。予想される出力のようにする必要があります。正規表現を使用することができます。

要件:

1.split space into new line. 
2.for numbers(i.e 123456789101112.....) it should be considered as follows 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
. 
. 
. 
so on,... 

After digit 9 the other numbers should be considered as double digit. 
+2

'tr'はPerlの正規表現では動作しませんが、' s /// g'は動作します。 – toolic

+0

あなたの入力は最後に数字の間にスペースがありません。 1,2,3,4などを別々の行にどうやって終わると思いますか? – toolic

+0

でも、私はこの行に@toolic – closedaccount

答えて

1

trが音訳です。これは、パターンではなく、個々の文字でのみ機能します。 /g修飾子を使用してs///を使用する必要があります。

$var1 =~ s/\s/\n/g; 

またsplitjoinでこれを行うことができます。

$var1 = join "\n", split//, $var1; 

それは、文字列の多くがあっても、パフォーマンスの面で違いを作るべきではありません。

+1

'1234567891011121314151'という別の行をどのように持ってくるかわかりません。 – ssr1012

+0

@ ssr1012私はそれを見ませんでした。真実。しかし、奇妙な入力。 – simbabque

関連する問題