Regular Expressions: The Rules

January 24, 2010

The following are the rules, a non-POSIX regular expression engine(such as in PERL, JAVA, etc ) would adhere to while attempting to match with the string,

Notation: the examples would list the given regex(pattern) , the string tested against (string) and the actual match happened in the string in between ‘<<<‘ and ‘>>>’.

1. The match that begins earliest/leftmost wins.

The intention is to match the cat at the end but the ‘cat’ in the catalogue won the match as it appears leftmost in the string.

pattern : cat

string :This catalogue has the names of different species of cat.

Matched: This <<< cat >>> alogue has the names of different species of cat.

1a.The leftmost match in the string wins, irrespective of the order a pattern appears in alternation

Though last in the alternation, ‘catalogue’ got the match as it appeared leftmost among the patterns in the alternation.

pattern :species|names|catalogue

string :This catalogue has the names of different species of cat.

Matched: This <<< catalogue >>>  has the names of different species of cat.

1b. If there are more than one plausible match occurs in the same position, then the order of the plausible matching patterns in the alternation counts.

All three patterns have a possible match at the same position, but ‘over’ is successful as it appeared first in the alternation.

pattern : over|o|overnight

string :Actually, I’m an overnight success. But it took twenty years.

Matched: Actually, I’m an <<< over >>> night success. But it took twenty years.


2. The standard quantifiers (* +, ? and {m,n}) are greedy

Greediness (*,+,?) would always try to match more before it tries to match minimum characters needed for the match to be successful ( ‘0’ for *,? ; ‘1’ for + )

The intention is to match the “Joy is prayer”, though .* went pass across all the double quotes and grabbing all the strings only to match the last double quote (“).

pattern :”.*”

string :”Joy is prayer”.”Joy is strength”.”Joy is Love”.

Matched: <<< “Joy is prayer”.”Joy is strength”.”Joy is Love” >>> .

2a. Lazy quantifiers would  favor the minimum match

Laziness (*?,+?,??) would always try to settle with minimum characters needed for the match to be successful before it tries to match the maximum.

The first double quote (‘) appeared was matched using lazy quantifier.

pattern :”.*?”

string :”Joy is prayer”.”Joy is strength”.”Joy i
s Love”.

Matched: <<< “Joy is prayer” >>> .”Joy is strength”.”Joy is Love”.

2b. The only time the greedy quantifiers would give up what they’ve matched earlier and settle for less is ‘when matching too much ends up causing some later part of the regex to fail’.

The \w* would match the whole word ‘regular_expressions’ initially. Later, since ‘s’ didn’t have a character to match and tend to fail would trigger the \w* to backtrack and match one character less. Thus the final ‘s’ matches the ‘s’ just released by \w* and whole match succeeds.

Note: Though the pattern would work the same way without paranthesis, I’d used them to show the individual matches in $1, $2, etc.

pattern : (\w*)(s)

string :regular_expressions

Matched: <<< regular_expressions >>>

$1 = regular_expression

$2 = s

Similarly, the initial match ‘x’ by ‘x*’ was given by later for the favor of the last ‘x’ in the pattern.

pattern : (x*)(x)

string : ox

Matched: o<<< x >>>

$1 =

$2 = x


2c. When more than one greedy quantifiers appears in a pattern, the first greedy would get the preference.

Though the .* initially matched the whole string, the [0-9]+ would able to grab just one digit ‘5’ from the .*, and the 0-9]+ settles with it since that satisfies its minimum match criteriat. Note that the ‘+’ is also a greedy quantifier and here it cant grab beyond its minimum requirement, since already there is an another greedy quantifier shares the same match.

Enter pattern : (.*)([0-9]+)

Enter string : Bangalore-560025

Matched: <<< Bangalore-560025 >>>

$1 = Bangalore-56002

$2 = 5


3. Overall match takes precedence.

Ability to report a successful match takes precedence. As its shown in previous example, if its necessary for a successful match the quantifiers ( greedy or lazy ) would work in harmony with the rest of the pattern.

Advertisements

Modify attribute properties in Active Directory

October 5, 2009

Long long ago, I did an active directory configuration with minor tweaking ( yet not widely documented ) for converting a single-valued attribute to multi-valued attribute. And automated couple of testcases for adding multiple values to an attribute using ldap eway and was living happily till last week.

Last week was when one of those unfortunate event had happened ie. the automated tests were failing and with the few minutes of investigation revealed I need to redo the ADS setup in a different m/c due to multiple reasons. 

Everything went cool, duplicating the domain data, SSL configuration till I tried to add multiple values to the attribute and only to see the below error in the ldap client,

the attribute cannot be modified because its owned by the system

 I searched my documents in vain for the tiny-secret-formulae which helped me long back. I was struggling, googling, bing(l)ing for hours and desperately installing few third-party tools hoping it would do the job, finally I stumbled on it,

Down here the steps to convert single-valued attribute to multi-valued attribute,

  1. Login as a member of Schema Admins
  2. Launch LDP.EXE
  3. Connect to the Schema Master using LDP.EXE
  4. Bind to the Schema Master using an account with Schema Admin permissions.
  5. From the Browse menu, choose Modify
  6. In the Modify dialog box, leave the DN field blank, and type schemaUpgradeInProgress in the Attribute field. In the Value field, enter the number 1. Click the Enter button, then click the Run button.
  7. Close the Modify dialog box.
  8. Launch ADSIEDIT.MSC and goto the properties of the attribute here its ‘sn’
  9. Check for the property name ‘isSingleValued’ and change the value to False. Click on Apply and close the property window.
  10. Run LDP again, and change the value of schemaUpgradeInProgress from 1 to 0.
  11. From the Active Directory Schema console, right click on the console and choose "Reload the Schema"
Check with your favorite ldap client adding multiple values for the same attribute.


GlassFish ESB v2.1 AMI for EC2

June 23, 2009

Now GlassFish ESB v2.1 is available via Amazon Elastic Compute Cloud ( Amazon EC2 ). To help easily build and secure cloud applications, the GlassFish ESB v2.1 AMI is created on hardened opensolaris .

This AMI is installed only with runtime component of the GlassFish ESB v2.1 ie. GlassFish 2.1 server + jbi components, with default configurations, for details on port numbers & credentials check the /root/ec2sun/GFESBV21_README. The applications created using the designtime component of the GlassFish ESB v2.1 can be deployed in the EC2 instance using admin console. Port ‘4848’ has to be opened in EC2 instance to access the admin console.

AMI ID: ami-5347a13a

AMI Manifest: opensolaris-2008.11-gfesb-v2.1.img.manifest.xml


Need for Speed: Undercover

April 26, 2009
If you are a race-gaming freak, you never could’ve missed NFS. I’ve been playing NFS from the Hot Pursuit days and here is my review on the last version Undercover.

Need for Speed: Undercover

April 26, 2009

I remember vaguely playing NFS first time around 2000. If I recall it well, I was stunned by the introduction video of the NFS : Hot Pursuit which captivated me to play the game till end, spending countless hours and sleepless nights. Since then my love for that game never faded, almost even after a decade NFS stayed top in my skimpy list of PC games.

One thing about NFS, starting from HOT Pursuit to Underground, Carbon Canyon to ProStreet, they all resemble a flick either ‘the Fast & the Furious’ sequel or ‘Gone in sixty seconds’ or you name it. Thats what makes it more interesting.

About NFS undercover:

The cops are back and this time ‘You ‘re the Cop’. Hey,  I’m not trying to confuse, remember though a cop, you’re in undercover, trying to be one of those bad gangs. The graphics, the plot and the choice of the cars everything is superb as usual. I’ve already finished the game once and started all again. Till the NFS:Shift been released, I guess I would play undercover couple of times.

Lets take the wheel, infiltrate them, take them out one by one.


My daughter’s graduation@Playschool

March 5, 2009

Its a wonderful experience watching your kid’s first graduation. Even more watching her performance on stage. I’ve started a blog for her own here where I post all wonderful happening in her life.


Sun includes GlassFish ESB in GlassFish Portfolio

February 10, 2009

Sun Microsystems announced the release of Sun GlassFish Portfolio, the open source Web platform based on GlassFish. Built on open source projects including Apache Tomcat, Ruby, PHP, Liferay Portal, OpenESB and GlassFish, the Sun GlassFish Portfolio packages these components into an open source platform with range of support and services options, from basic patch services to 24×7 mission critical support.

Why the announcement is significant for GlassFish ESB and OpenESB project?

With today’s announcement of the GlassFish Portfolio, Sun Microsystems has also announced the commercial support options for GlassFish ESB (or Sun GlassFish Enterprise Service Bus), including a pricelist. For many companies not withstanding the effort in the community, it’s a requirement to have commercial support before considering using an open source product. So with today’s announcement, we should see an acceleration in OpenESB adoption, and as a consequence, also in OpenESB development! Good news for OpenESB!!!

The GlassFish Portfolio includes the GlassFish Application Server along with other components. To view the entire list go here.