簡體   English   中英

正則表達式Perl

[英]Regular Expression Perl

我正在學習perl中的正則表達式,我希望有一個類似於下面的函數:

sub RegEx() 
{
  my $T = "0,1,";
  my $T2 = "-0:0-0:1-0:2-0:3-0:4-1:0-1:1-1:2-1:3-";

  printf ("T= %s <br>", $T);
  printf ("T2 %s <br>", $T2);

  my @values = split(',', $T);
  foreach my $val (@values) {
         printf ("We are at item %s in T <br>", $val);
         my $temp = $val .":" . "\(\\d\)\+";
         printf ("Rexeg %s <br>",$temp);
         @result = split(/$temp/, $T2);
         foreach my $val2 (@result) {
                printf ("T2- %s <br>", $val2);
         }
   }
}

並根據索引($ T)將$ T2的值解析為數組

但正在顯示以下內容

T= 0,1 
T2 -0:0-0:1-0:2-0:3-0:4-1:0-1:1-1:2-1:3- 
We are at item 0 in T 
Rexeg 0:(\d)+ 
T2- - 
T2- 0 
T2- - 
T2- 1 
T2- - 
T2- 2 
T2- - 
T2- 3 
T2- - 
T2- 4 
T2- -1:0-1:1-1:2-1:3- 
We are at item 1 in T 
Rexeg 1:(\d)+ 
T2- -0:0-0:1-0:2-0:3-0:4- 
T2- 0 
T2- - 
T2- 1 
T2- - 
T2- 2 
T2- - 
T2- 3 
T2- - 

請讓我知道為什么我仍然看到

  1. T2- -0:0-0:1-0:2-0:3-0:4-當正則表達式為1時:(\\ d)+

  2. “ - ”

作為@results的輸出?

split毫無意義。 您不想拆分字符串。 你要:

my @result = $T2 =~ /$temp/g;

你真的應該在你的模式中加入“ - ”。 (考慮當數字達到10時會發生什么。)

my @result = $T2 =~ /-\Q$val\E:(\d+)/g;

\\Q..\\E在技​​術上是不需要的,如果$val總是數字,但這是一個好習慣。)

也就是說,我可能只需解析一次T2美元。

my $T2 = "-0:0-0:1-0:2-0:3-0:4-1:0-1:1-1:2-1:3-";
my %T2; push @{ $T2{$1} }, $2 while $T2 =~ /-(\d+):(\d+)/g;
...
my @result = @{ $T2{$val} };
  1. 你分成1:(\\d)+ 第一個匹配元素的左邊是什么? 你寫的字符串。

  2. 你分成1:(\\d)+ 這個正則表達式的兩場比賽之間有什么關系? 破折號。

你分成1:(\\d)+ 這意味着,您將字符串切割成部分,並使用正則表達式的結果作為分隔符 使用()整數全局使它在全局結果中顯示為正則表達式匹配。

現在,您可以向我們解釋您想要實現的目標,然后我們可以幫助您糾正自己。

暫無
暫無

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

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