As a latecomer to this thread, ++ to replies above as to syntax, applied to the logic of (some of?) OP's spec.

My problem is with the spec, "find a regular expression that finds 2 or 3 words on the same line (no matter what the order) and captures the values beside the matching words." which also includes this requirement: "to parse the file for lines containing "Fred Flintstone" "Barney Rubble" "Joe Rockhead"...."

#!/usr/bin/perl use strict; use warnings; # 817539 my $pattern = qr/ ^(\d) (?= .* \bfred \s+ (Flintstone) ) (?= .* \bbarney \s+ (Rubble) ) (?= .* \bjoe \s+ (Rockhead) ) /ix; while ( my $line = <DATA> ) { chomp $line; if ( $line =~ /$pattern/ ) { my $lineno = $1; my $company = join '_', $2, $3, $4, 'inc'; print "$lineno $company \n"; } elsif ( $line =~ /(\d).*/) { my $lineno = $1; print "$lineno, |$line|, does not match\n"; } } __DATA__ 1 bar Fred Flintstone Barney Rubble Joe Rockhead Alfred E Neuman 2 Joe Rockhead AE Neuman baz Fred Flintstone (does not contain name2) 3 Barney Rubble bat Fred Flintstone Joe Rockhead AE Neuman 4 Barney Rubble bat Joe Rockhead AE Neuman Fred Flintstone 5 Joe Jones bar Fred Flintstone Barney Rubble Alfred E Neuman(does not + contain Name3) 6 Barney Jones Barney Rubble Joe Rockhead Fred Smith (does not contai +n Name1 OR Name2) 7 Barney Rubble Fred Flintstone Joe Rockhead 8 Joe Rockhead Fred Flintstone Barney Rubble 9 Joe Rockhead Alfred Flintstone Barney Rubble (has Alfred sted Fred) 0 Joe Rockhead Fred Smith Barney Rubble (has Smith sted Flintstone)

Output:

1 Flintstone_Rubble_Rockhead_inc 2, |2 Joe Rockhead AE Neuman baz Fred Flintstone (does not contain nam +e2)|, does not match 3 Flintstone_Rubble_Rockhead_inc 4 Flintstone_Rubble_Rockhead_inc 5, |5 Joe Jones bar Fred Flintstone Barney Rubble Alfred E Neuman(does + not contain Name3)|, does not match 6, |6 Barney Jones Barney Rubble Joe Rockhead Fred Smith (does not co +ntain Name1 OR Name2)|, does not match 7 Flintstone_Rubble_Rockhead_inc 8 Flintstone_Rubble_Rockhead_inc 9, |9 Joe Rockhead Alfred Flintstone Barney Rubble (has Alfred sted Fr +ed)|, does not match 0, |0 Joe Rockhead Fred Smith Barney Rubble (has Smith sted Flintstone +)|, does not match

In other words, is OP's spec, "2 or 3 words on the same line (no matter what the order)" sound and reasonable (esp. in light of the restriction to "Rubble,..." in another part of the question?

I raise the question because it appears that OP is trying to construct company names (say, for example, "Flintstone_Rubble_Rockhead_Inc") without regard to the fact that "Flintstone_Rubble_Rockhead_Inc" is not the same company as "Rubble_Flintstone_Rockhead_Inc".

BTW, Lain78's use of alternation addresses my question about the significance of the order of names but veers off the One_True_Way (True_One_Way ??) in failing to use strict; use warnings;.

Update: Fixed missing i tag in 2nd quote; added "requirement" for clarity -- both in 2nd para.

Update 2: OP's update in Re 4, "parsing settings from a config file" casts the problem very differently (assuming the inconsistent ordering in the config is inconsequential) but highlights a thought for any who consider posing a question with the real need obfuscated in a scenario unrelated to your real purpose: Don't; you may be wasting your time and that of the Monks who try to help.


In reply to Re: Need a Regular Expression that ... (Semi-OT) by ww
in thread Need a Regular Expression that tests for words in different order and captures the values found. by greatwazzoo

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.