2017-01-04 4 views
-1

パイプの間で一致させる必要のあるテキストがあります。私は\|[^|]+\|を試しましたが、それはそれぞれを集めるようではありません。複数のパイプ内でテキストを集める正規表現

|N/A|text123|text1235|Medium|1|Medium|test123|test456|test|test|test|http|tcp| 
+1

'/ [^ |] +/g'はどうでしょうか?あなたの環境は何ですか?失敗した現在のコードを共有してください。 –

答えて

5

これはsplitのための仕事のようになります。

my @items = split /\|/, $string; 

print "$_\n" for @items; 

出力:

N/A 
text123 
text1235 
Medium 
1 
Medium 
test123 
test456 
test 
test 
test 
http 
tcp 

限り正規表現として、これは動作するはずです:

my @items = /[^|]+/g; 
+2

'my @items = split/\ | /、$ string;行頭の '|'を説明するにはshift(@items);や 'my @items = split/\ | /、substr($ string、1);'が必要です。 – ikegami

+1

'$ items [0] eq '|';'先頭に '| 'がないことを許可する場合はshift @items – zdim

0

はこれを試してみてください:

[^\|]+ 

e.e.e.パイプ以外のものにマッチする

+0

これは最初の一致のみを取得します。すべてのマッチを得るには '/ g'(グローバル)修飾子が必要です(私はOPが何とかそれを求めていると思います)。 – stevieb

+1

ああ、そうです。意味をなさない私は、デフォルトで/ gが設定されているhttps://regex101.com/を使ってデバッグしていました。ありがとう! –

関連する問題