How to group within a group using Perl's regex?

I have the following line of code  if(/^\@([^\n]*).*(^1\.[^\n]*)/ms) below that needs further grouping for the second group
(^1\.[^\n]*)

#!/usr/bin/perl

use strict;
use warnings;

open FH, '<', 'dd' or die $!;

$/='__Data__';
while(<FH>)
{
           if(/^\@([^\n]*).*(^1\.[^\n]*)/ms)
            {

                print $1,"\n",$2,"\n\n";
             }
}

For example, I have the following data record. I would like to capture the whole number line in which this code does this (^1\.[^\n]*) but I also would like to subcapture the (dkdkdkd-) leading to the hyphen so I can color code it using the html color tag.

__Data__
@scsi_test1
passed
stop
1. dkdkdkd- dldldldldldldldl

My way was to do the following (see below) but this does not work because it also captures the other lines after line number 1.

if(/^\@([^\n]*).*(^1\.(.*:)[^\n]*)/ms)
areyouready344Asked:
Who is Participating?
 
wilcoxonConnect With a Mentor Commented:
I think you'll end up with the pieces being $1, $3, $4.  To get them to be $1, $2, $3, and make it work slightly better (very tiny performance increase and put space outside highlight):

if(/^\@([^\n]*).*(^1\.\s*)([^\n:-]*)([^\n]*)/ms)
0
 
areyouready344Author Commented:
I"m not getting no output.
0
 
wilcoxonCommented:
You're close...

if(/(^\@[^\n]*).*(^1\.\s*([^\n-]*)[^\n]*)/ms)

will do it.  The sub-capture (string up to the dash) is $3.
0
 
areyouready344Author Commented:
sorry for not being clear, but that's not what I really want. I need that line grouped flat as in

(1.) (dkdkdkd-) (dldldldldldldldl)

$1, $2, $3

this will allow me to hightlight $2 using html color tag..
0
 
areyouready344Author Commented:
I figured it out... thanks...

if(/^\@([^\n]*).*((^1\.)(\s*[^\n:]*)([^\n]*))/ms)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.