help with preg_match pattern [message #184747] |
Tue, 28 January 2014 18:53 |
bill
Messages: 310 Registered: October 2010
Karma: 0
|
Senior Member |
|
|
Yup managed to confuse myself reading the manual.
I have an numerically indexed array that consists of fragments of
a prescription.
Rarely I may have an array element in the form of:
[Alert: This Rx was initially created on 1/27/2014.]
I want to delete those array elements (probably using
array_slice), but first I need to figure out which array elements
match the pattern. The date may change and will use one or two
digit days and months.
I could just look for the first part of the element, but I want
to be prepared for the people upstream (over whom I have no
influence - different company) to add other Alerts, some of which
I will want to ignore, some of which I may want to keep.
I am certainly open to other suggestions.
bill
|
|
|
Re: help with preg_match pattern [message #184748 is a reply to message #184747] |
Tue, 28 January 2014 19:04 |
Jerry Stuckle
Messages: 2598 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On 1/28/2014 1:53 PM, bill wrote:
> Yup managed to confuse myself reading the manual.
>
> I have an numerically indexed array that consists of fragments of a
> prescription.
> Rarely I may have an array element in the form of:
>
> [Alert: This Rx was initially created on 1/27/2014.]
>
> I want to delete those array elements (probably using array_slice), but
> first I need to figure out which array elements match the pattern. The
> date may change and will use one or two digit days and months.
> I could just look for the first part of the element, but I want to be
> prepared for the people upstream (over whom I have no influence -
> different company) to add other Alerts, some of which I will want to
> ignore, some of which I may want to keep.
>
> I am certainly open to other suggestions.
>
> bill
I'm not real good with regex's myself, but maybe something like this
will work:
^\s*\[Alert: This Rx was initially created on
[\d]{1,2}/[\d]{1,2}/[\d]{4}\.\]\s*$
Adjust as you see fit.
BTW, I find The Regex Coach (google for it - I don't have URL handy) to
be helpful in designing appropriate regex's.
--
==================
Remove the "x" from my email address
Jerry Stuckle
jstucklex(at)attglobal(dot)net
==================
|
|
|
Re: help with preg_match pattern [message #184749 is a reply to message #184747] |
Tue, 28 January 2014 19:42 |
Denis McMahon
Messages: 634 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On Tue, 28 Jan 2014 13:53:17 -0500, bill wrote:
> Yup managed to confuse myself reading the manual.
>
> I have an numerically indexed array that consists of fragments of a
> prescription.
> Rarely I may have an array element in the form of:
>
> [Alert: This Rx was initially created on 1/27/2014.]
>
> I want to delete those array elements (probably using array_slice), but
> first I need to figure out which array elements match the pattern. The
> date may change and will use one or two digit days and months.
> I could just look for the first part of the element, but I want to be
> prepared for the people upstream (over whom I have no influence -
> different company) to add other Alerts, some of which I will want to
> ignore, some of which I may want to keep.
>
> I am certainly open to other suggestions.
"/Alert: This Rx was initially created on \d{1,2}\/\d{1,2}\/\d{4}/"
If they may use 2 or 4 digit years:
"/Alert: This Rx was initially created on \d{1,2}\/\d{1,2}\/\d{2,4}/"
Or you might chance reducing the date to [\/\d]+
"/Alert: This Rx was initially created on [\d\/]+/"
If you want multiple text phrases in the form:
Alert: phrase date"
Then you need to build your regex like:
"/Alert: (phrase|phrase|phrase|phrase.....|phrase) [\d\/]+/"
But if only some phrases end in date, then the date match could become
part of the phrase:
"/Alert: (phrase [\d\/]+|phrase|phrase|phrase.....|phrase)/"
Or an optional add-on at the end:
"/Alert: (phrase|phrase|phrase|phrase.....|phrase)( [\d\/]+)?/"
Designing a regex usually needs a bit more of a specification of the
phrases you wish to capture than "something that some third party might
decide to put there at some future date", and like most forms of coding,
there's usually more than one way to do it, and it's rare for the experts
to agree on single a "best" solution.
Are you trying to match multiple potential phrases in a single regex?
Have you looked at preg_grep, which can return the members of an array
that match a particular regex. If you combine this with array_diff, then
I think (untested) you can fairly easily find all the elements which do
not match a given regex:
$tmp = preg_grep( $patt, $array );
$array = array_diff( $array, $tmp );
Then all you need is a pattern (see above)
--
Denis McMahon, denismfmcmahon(at)gmail(dot)com
|
|
|