in reply to Selecting HL7 Transactions
G'day BillDowns,
You have a number of issues here. I've included a fair amount of detail below but refer to perlre for the full story.
- You're not actually showing a regex but just a fragment of one (I'll assume "/PV1\|1\|O\|(.*?\|){3}\|/"). I'm not trying to be pedantic but I can only respond to what you've written: for all I know, "PV1\|1\|O\|(.*?\|){3}\|" may be part of a larger regex. Also, I have no idea what modifiers, if any, you've used.
- The "." in ".*?" matches any character including a pipe ("|") character which isn't what you want. (That's a slight oversimplication: it doesn't match a newline character unless you used the "s" modifier.) So, ".*?" would be better as "[^|]*" (zero or more characters that aren't pipe characters).
- You don't anchor the regex so it could match anywhere in the string. To match at the beginning of the string you'll need to prepend "^" or "\A".
- You've used capturing parentheses "( ... )" here. This won't break anything as it currently stands but could become an issue if you do want to capture fields later: "(?: ... )" (for clustering, not capturing) would be better.
- Purely as a matter of style and personal taste, replacing the escaped pipe "\|" with the character class "[|]" may reduce what's been referred to as backslashitis and improve readability. Either is fine, it's up to you.
Putting all that together, you end up with a few options. Minimal changes would give: "/^PV1\|1\|O\|(?:[^|]*\|){3}\|/".
Having said all that, I'm wondering if splitting the lines on pipe characters might just be a whole lot easier in terms of general readability and future maintenance. Something along these lines:
my @fields = split /[|]/ => $line; ... if ($fields[0] eq 'MSH' and $fields[8] eq 'ADT^A02') { ... } ... if ($fields[0] eq 'PV1' and $fields[6] eq '') { ... } ...
-- Ken
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Selecting HL7 Transactions
by BillDowns (Novice) on May 01, 2013 at 23:22 UTC | |
by kcott (Archbishop) on May 02, 2013 at 00:20 UTC | |
by BillDowns (Novice) on May 02, 2013 at 01:02 UTC | |
by kcott (Archbishop) on May 02, 2013 at 02:41 UTC | |
by BillDowns (Novice) on May 02, 2013 at 03:07 UTC | |
| |
by Anonymous Monk on May 02, 2013 at 00:46 UTC | |
by BillDowns (Novice) on May 02, 2013 at 00:48 UTC |
In Section
Seekers of Perl Wisdom