How to make a Regex that specifies elements in any order? -


i want regex matches string contains

 - @ least 1 brace: } or {   ,  - @ least 1 digit: \d   ,  - @ least 1 instance of either: <p> or </p> 

but in order, following matched:

<p>{123  2}</p>  2<p>}}}  {}{}{}<p></p></p>234234}}} 

and none of these matched:

<p>{ alphabet 123  {2}  {{{}}}  <p>1</p> 

here's have far, demands 1 of of components:

(<\/p>|<p>|\d|\}|\{)+ 

my problem don't know how make more general without having specify order this:

(<\/p>|<p>)+(\d)+(\}|\{)+ 

or making stupidly long enumerate every possible order...

how can "needs @ least 1 of each of these components in order?"

thanks.

if regex flavor supports lookaheads, can use positive lookahead as:

^(?=.*(\{|\}))(?=.*\d)(?=.*(<p>|<\/p>)).*$ 

this regex uses positive lookahead assert string atleast 1 of either { or }, @ least 1 digit , atleast 1 of either <p> or </p>.

if want ensure string has these , nothing else can use regex:

^(?=.*(\{|\}))(?=.*\d)(?=.*(<p>|<\/p>))(<\/p>|<p>|\d|\}|\{)*$ 

which works previous regex ensures input has no other character.

regex implemented in perl

the regex can made bit shorter as:

^(?=.*[{}])(?=.*\d)(?=.*<\/?p>)(<\/?p>|[\d}{])*$ 

which makes use of fact \{|\} same [{}], <p>|<\/p> same <\/?p>.


Comments

Popular posts from this blog

android - Spacing between the stars of a rating bar? -

html - Instapaper-like algorithm -

c# - How to execute a particular part of code asynchronously in a class -