簡體   English   中英

與Perl中的正則表達式相關

[英]Related to regular expressions in Perl

我在某些文本文件中寫了一個字符串-

A[B[C[10]]]

我需要提取此字符串中使用的數組的信息。 例如,我必須將信息存儲在數組中,

@str = (A[], B[], C[10])

我想在Perl中使用regex完成此操作。 我想要適用於array內array的每種情況的解決方案,像這樣

A[B[C[D[E[F[10]]]]]]

那么,如何創建該@str 數組

您可以使用正則表達式模式以遞歸方式解析此字符串,然后調用Perl代碼以保存中間值

像這樣

use strict;
use warnings 'all';
use v5.14;

my @items;
my $i;

my $re = qr{
    ([A-Z]\[)    (?{ $items[$i++] = $^N })
    (?:
        (?R)
        | 
        (\d+)    (?{ $items[$i-1] .= $^N })
    )
    \]           (?{ $items[--$i] .= ']' })
}x;

my $s = 'A[B[C[D[E[F[10]]]]]]';


use Data::Dump;

(@items, $i) = ();
dd \@items if 'A[B[C[10]]]' =~  /$re/g;

(@items, $i) = ();
dd \@items if 'A[B[C[D[E[F[10]]]]]]' =~  /$re/g;

輸出

["A[]", "B[]", "C[10]"]
["A[]", "B[]", "C[]", "D[]", "E[]", "F[10]"]

一個正則表達式+拆分以簡潔的方式實現它:

use v5.14;
my $s = 'A[B[C[D[E[F[10]]]]]]';

$s =~ s/(\w)\[(\d+)?\]*/\1\[\2\] /g;
my @str = split(/ /, $s);

map{print "$_\n"}@str;

打印出:

A[]
B[]
C[]
D[]
E[]
F[10] 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM