help with preg_match pattern

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
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.


Re: help with preg_match pattern

On 1/28/2014 1:53 PM, bill wrote:
Quoted text here. Click to load it

I'm not real good with regex's myself, but maybe something like this  
will work:

^\s*\[Alert: This Rx was initially created on  

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

Re: help with preg_match pattern

On Tue, 28 Jan 2014 13:53:17 -0500, bill wrote:

Quoted text here. Click to load it

"/Alert: This Rx was initially created on \d\/\d\/\d/"

If they may use 2 or 4 digit years:

"/Alert: This Rx was initially created on \d\/\d\/\d/"

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,

Site Timeline