Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: Pattern matching

by Athanasius (Archbishop)
on Nov 10, 2018 at 08:54 UTC ( [id://1225520]=note: print w/replies, xml ) Need Help??


in reply to Pattern matching

Hello nursyza, and welcome to the Monastery!

Parentheses within a regex are for capturing a match. To match a literal left parenthesis, you have to escape it:

use strict; use warnings; my $MODULE_NAME = 'MODULE C17 (N1, N2, N3, N6, N7, N22, N23)'; if (defined($MODULE_NAME) && ($MODULE_NAME =~ / ^ (.+) \s+ \( /x)) { my $module_name = $1; print "Module name = >$module_name<\n"; }

Output:

18:49 >perl 1939_SoPW.pl Module name = >MODULE C17< 18:49 >

Note: The /x modifier is used here to make the regex more readable. The regex says: match the beginning of a line (^), then capture as many characters as possible, providing that these captured characters are followed by (a) one or more spaces, then (b) an opening (left) parenthesis.

Update: My use of \s+ above is sub-optimal, because it matches only the last whitespace character following the module name. Better would be:

if (defined($MODULE_NAME) && ($MODULE_NAME =~ / ^ (.+) \( /x)) { my $module_name = $1; $module_name =~ s/ \s+ $ //x; print "Module name = >$module_name<\n"; }

which explicitly removes trailing whitespace from the module name.

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: Pattern matching
by nursyza (Novice) on Nov 10, 2018 at 09:10 UTC

    Sorry i might forget to mention that the line MODULE C17 (N1, N2, N3, N6, N7, N22, N23) is actually obtained from a text file.

    MODULE C17 (N1, N2, N3, N6, N7, N22, N23); INPUT N1, N2, N3, N6, N7; OUTPUT N22, N23; WIRE N10, N11, N16, N19; NAND NAND2_1 (N10, N1, N3); NAND NAND2_2 (N11, N3, N6); NAND NAND2_3 (N16, N2, N11); NAND NAND2_4 (N19, N11, N7); NAND NAND2_5 (N22, N10, N16); NAND NAND2_6 (N23, N16, N19); ENDMODULE

    I tried your coding but it also prints the NAND line.

      Unfortunately, what you have provided now is still not a complete spec. You might want any of these things:

      • Just process the first line of the file.
      • Just process the first line which has a bracket.
      • Process every line which starts with an M.
      • Process every line which starts with an M and contains a bracket.
      • ...

      So, your first task is to create a tight specification. After that you can devise an algorithm and only then start to consider the coding.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1225520]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others rifling through the Monastery: (4)
As of 2024-04-18 23:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found