Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 415
  • Last Modified:

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)
0
areyouready344
Asked:
areyouready344
  • 3
  • 2
1 Solution
 
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
 
wilcoxonCommented:
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

Featured Post

Become an Android App Developer

Ready to kick start your career in 2018? Learn how to build an Android app in January’s Course of the Month and open the door to new opportunities.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now