小编kat*_*een的帖子

在Perl中,如何从正则表达式中获取匹配的子字符串?

我的程序读取其他程序的源代码并收集有关使用过的SQL查询的信息.我有获取子串的问题.

...
$line = <FILE_IN>;
until( ($line =~m/$values_string/i && $line !~m/$rem_string/i) || eof )
{
   if($line =~m/ \S{2}DT\S{3}/i)
   {

   # here I wish to get (only) substring that match to pattern \S{2}DT\S{3} 
   # (7 letter table name) and display it.
      $line =~/\S{2}DT\S{3}/i;
      print $line."\n";
...
Run Code Online (Sandbox Code Playgroud)

结果打印打印整行而不是我期望的子串.我尝试了不同的方法,但我很少使用Perl,可能会产生基本的概念错误.(行中tablename的位置不固定.另一个问题是多次出现,即[... SELECT*FROM AADTTAB,BBDTTAB,...]).我怎样才能获得那个子串?

regex perl

10
推荐指数
4
解决办法
6万
查看次数

perls,数组,数组的可变长度

我想在perl脚本中修改一个特定的行:

@list = ([$tmp[0],$tmp[1],$tmp[2]]);
Run Code Online (Sandbox Code Playgroud)

我把它改成了这个:

if( $input == 3 )
{
        @list = ([$tmp[0],$tmp[1],$tmp[2]]);
}
if( $input == 2 )
{
        @list = ([$tmp[0],$tmp[1]]);
}
if( $input == 1 )
{
        @list = ([$tmp[0]]);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作,但我希望它适用于$input最多40的值.

我尝试了几种不同的方法,但我无法以更优雅的方式对其进行编码,这真的很烦我.

非常感谢任何帮助.

arrays perl

2
推荐指数
1
解决办法
61
查看次数

标签 统计

perl ×2

arrays ×1

regex ×1