in reply to Need a regex for matching multiple words within parentheses

There are a couple obvious problems.

First, (.). in the third match should contain a quantifier and you should be careful of "." as a greedy match will swallow the end parenthesis and cause the match to fail. I'd use (\S+) or (.+?).

Second, you should have another backslash before the very last closing parenthesis.

Note: I didn't take the time to test these recommendations.

Update: Er...duh, don't do that...

Update: That is, don't do the striked one, it will get the first word (or more if there is no whitespace between), but the other works fine. Sorry, I was unclear.

Replies are listed 'Best First'.
Re: Re: Need a regex for matching multiple words within parentheses
by Not_a_Number (Prior) on Dec 12, 2003 at 19:51 UTC
    Er...duh, don't do that...

    Why not? Your suggestion - with (.+?) - works fine for me:

    while ( <DATA> ) { if ( /^ALTER\s+TABLE\s+ (\w+) # $1 \s+ADD\s+CONSTRAINT\s+ (\w+) # $2 \s+PRIMARY\s+KEY\s+\(\s* (.+?) # $3 \s*\)/x ) { print "\$1: <$1> \$2: <$2> \$3: <$3>\n"; } } __DATA__ ALTER TABLE ORDERS ADD CONSTRAINT PK_ORDER_ORDER_NUM PRIMARY KEY ( ORD +ER_NUM) ALTER TABLE ORDER_ITEMS ADD CONSTRAINT PK_ORDER_NUM_ITEMS PRIMARY KEY +( ORDER_NUM, ITEM_NUM, SUB_TYPE )

    ++hanenkamp (or have I missed something?)

    dave