我输入的字符串格式如下(右括号后可能有空格)
(c21bd4d76fe97759aa27a0c99bff6710)
我想把number和id提取到不同的变量中,我该怎么做?
我已经尝试了以下方法,但我想要的东西,将与regex工作,因为输入字符串后的额外空间打破了我的解决方案。
$text = "(1, 'c21bd4d76fe97759aa27a0c99bff6710')";
my @parts = split(/,/,$text);
my $rowd_id = substr(@parts[0],1);
my $id = substr(@parts[1],2,-2);
print "$rowd_id $idn";
您可以在正则表达式中使用捕获组:
my $text = "(1, 'c21bd4d76fe97759aa27a0c99bff6710')";
my $re = qr/(h*(w+)h*,h*'([^']+)'/;
my @captured = $text =~ $re;
if( @captured ) {
my $rowd_id = @captured[0];
my $id = @captured[1];
print "$rowd_id :: $idn";
}
输出:
1 :: c21bd4d76fe97759aa27a0c99bff6710
RegEx细节:
(
: Match a(
h*
:匹配0个或多个空白(w+)
:匹配捕获组#1中的1+单词字符h*
:匹配0个或多个空白,
: Match a,
h*
:匹配0个或多个空白'
: Match a'
([^']+)
:匹配1+捕获组#2中非'
的任何字符'
: Match a'
利用正则表达式的强大功能可以达到预期的结果。
use strict;
use warnings;
use feature 'say';
my $text = "(1, 'c21bd4d76fe97759aa27a0c99bff6710')";
my($row,$id) = $text =~ /^((d+),s+'([^']+)'s*)/;
say "row=$row, id=$id";
对$id
的快速检查导致相信它具有十六进制格式,并且正则表达式可以更改为以下格式
my($row,$id) = $text =~ /^((d+),s+'([d,a-f]+)'s*)/i;
输出row=1, id=c21bd4d76fe97759aa27a0c99bff6710
参考:教程正则表达式