in reply to Pattern matching exlusion

Like this?

@tests = qw[ 10-K 10-KSB 10-K405 10-KSB405 10-Q 10-K/B 10-KSB/ABC 10- +K405/A 10-KSB405/A 10-Q/A];; printf "%s : %s\n", $_, $_ =~ m[10-[KQ][^/]*$] ? 'matches.' : 'does no +t match.' for @tests;; 10-K : matches. 10-KSB : matches. 10-K405 : matches. 10-KSB405 : matches. 10-Q : matches. 10-K/B : does not match. 10-KSB/ABC : does not match. 10-K405/A : does not match. 10-KSB405/A : does not match. 10-Q/A : does not match.

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: Pattern matching exlusion
by wrkrbeee (Scribe) on Nov 29, 2014 at 03:15 UTC
    Hi BrowserUk, Yup, you nailed it! Exactly what I'm looking for. I am most grateful for your willingness to help. Can't thank you enough! Happy Holidays! Rick
Re^2: Pattern matching exlusion
by wrkrbeee (Scribe) on Nov 29, 2014 at 14:04 UTC
    Hi BrowserUk, Question: my current pattern matching line of code looks like this: if ($form_type=~/^$formget/i); How would I incorporate the code you suggested in your post? Presumably, I would add m[10-KQ^/*$] , but I am unsure how the syntax plays out. Thank you!!
      ... m[10-KQ^/*$] ...

      Huh?!? You really need to start using  <code> ... </code> tags. Please see Markup in the Monastery, Writeup Formatting Tips, How do I post a question effectively?.

      How would I incorporate the code [BrowserUk] suggested ...

      One way would be to copy the contents of the  m// given by BrowserUk into a  qr// regex object as you originally had it, and then interpolate the  qr// into a  m// match as in your OP (I'm using  \z in place of  $ to match absolute end-of-string):

      c:\@Work\Perl\monks>perl -wMstrict -le "my @tests = qw[ 10-K 10-KSB 10-K405 10-KSB405 10-Q 10-K/B 10-KA/ 10-KSB/ABC 10-K405/A 10-KSB405/A 10-Q/A ]; ;; my $formget = qr{ 10- [KQ] [^/]* \z }xms; ;; print qq{'$_': }, $_ =~ m[^$formget] ? 'matches' : 'does not match' f +or @tests; " '10-K': matches '10-KSB': matches '10-K405': matches '10-KSB405': matches '10-Q': matches '10-K/B': does not match '10-KA/': does not match '10-KSB/ABC': does not match '10-K405/A': does not match '10-KSB405/A': does not match '10-Q/A': does not match
      Please see perlre, perlrequick and perlretut.

      Also: What version of Perl are you working with? It may be useful to know this for future reference.

      Update: I forgot about case insensitivity. You can add this with an  /i modifier:
          my $formget = qr{ 10- [KQ] [^/]* \z }xmsi;
      or, better, IMHO, for stylistic reasons,  (?i)
          my $formget = qr{ (?i) 10- [KQ] [^/]* \z }xms;
      or, best of all,
          my $formget = qr{ 10- [KkQq] [^/]* \z }xms;
      because it avoids the  /i performance hit if you are processing very many strings or very long strings.