Re: question about regexp_substr

  • From: amonte <ax.mount@xxxxxxxxx>
  • To: Jackie Brock <J.Brock@xxxxxxxxxxxxx>
  • Date: Wed, 17 Dec 2014 00:11:20 +0100

Hello

I dont get why there is 0 character immediately after 1

May be if you can do the same sort of explanation for + would help

Thanks a lot



2014-12-16 23:53 GMT+01:00 Jackie Brock <J.Brock@xxxxxxxxxxxxx>:
>
>  After the A, the first instance of 0 or more non-numeric characters is 0
> characters immediately after the 1, so an empty string.  The third instance
> of 0 or more, including the A and the match immediately after the 1 (0
> length), is B.  Does that help?
>
>
>
> *From:* amonte [mailto:ax.mount@xxxxxxxxx]
> *Sent:* Tuesday, December 16, 2014 3:04 PM
>
> *To:* Jackie Brock
> *Cc:* Oracle-L Group
> *Subject:* Re: question about regexp_substr
>
>
>
> Hi Jackie
>
> Not sure what do you mean, I did this:
>
> select regexp_substr('A1B2C3D4E', '[^0-9]*', 1, 1) occur_1,
>        regexp_substr('A1B2C3D4E', '[^0-9]*', 1, 2) occur_2,
>        regexp_substr('A1B2C3D4E', '[^0-9]*', 1, 3) occur_3,
>        regexp_substr('A1B2C3D4E', '[^0-9]*', 1, 4) occur_4,
>        regexp_substr('A1B2C3D4E', '[^0-9]*', 1, 5) occur_5
> from dual;
>
> O O O O O
> - - - - -
> A   B   C
>
> select regexp_substr('A1B2C3D4E', '[^0-9]+', 1, 1) occur_1,
>        regexp_substr('A1B2C3D4E', '[^0-9]+', 1, 2) occur_2,
>        regexp_substr('A1B2C3D4E', '[^0-9]+', 1, 3) occur_3,
>        regexp_substr('A1B2C3D4E', '[^0-9]+', 1, 4) occur_4,
>        regexp_substr('A1B2C3D4E', '[^0-9]+', 1, 5) occur_5
> from dual;
>
> O O O O O
> - - - - -
> A B C D E
>
> And I dont understand very well why * gives A, B and C whereas + gives
> expected output.
>
> This is how I read it,
>
> regexp_substr('A1B2C3D4E', '[^0-9]*', 1, 1) says start searching from
> position 1 for first pattern which is non-numeric and no matter if there is
> any pattern occurence so A is printed
>
> regexp_substr('A1B2C3D4E', '[^0-9]*', 1, 1) says start searching from
> position 1 for second pattern which is non-numeric and no matter if there
> is any pattern occurence. If I parse the line A is non-numeric therefore is
> a candidate but I am looking for the second occurence so I keep on
> searching, immediately see number 1 so the pattern is not matched so keep
> on searching, we now read B which is non-numeric, satisfies the pattern so
> it should be printed but it's not?
>
>
>
>
>
>
> 2014-12-16 22:42 GMT+01:00 Jackie Brock <J.Brock@xxxxxxxxxxxxx>:
>
> J  Run it with various values where the three is – get the first
> occurrence, then the second, then the third, then the fourth – you’ll
> easily see what it’s doing.
>
>
>
> *From:* amonte [mailto:ax.mount@xxxxxxxxx]
> *Sent:* Tuesday, December 16, 2014 2:30 PM
> *To:* Jackie Brock
> *Cc:* Oracle-L Group
> *Subject:* Re: question about regexp_substr
>
>
>
> Hello Jackie
>
> I know + means > 1 and * > 0 occurence. But I dont see why they give
> different results in my example.
>
> I understand that what query is asking with * is
>
> "find in the string any non-numeric character pattern, no matter if the
> there is character or not in the third occurence". I dont see why B
> satisfies such condition?
>
>
>
> Thanks in advance
>
>
>
> Alex
>
>
>
> 2014-12-16 22:23 GMT+01:00 Jackie Brock <J.Brock@xxxxxxxxxxxxx>:
>
> The plus sign indicates that it expects at least 1 digit (1 or more).  The
> * means 0 or more.
>
>
>
> *From:* oracle-l-bounce@xxxxxxxxxxxxx [mailto:
> oracle-l-bounce@xxxxxxxxxxxxx] *On Behalf Of *amonte
> *Sent:* Tuesday, December 16, 2014 2:07 PM
> *To:* Oracle-L Group
> *Subject:* question about regexp_substr
>
>
>
> Hi people
>
> I have some difficulty understanding applying an operator to the pattren
> in regexp_substr. Not sure if anyone can help ?
>
> The question is, what is the difference between these two queries:
>
> select regexp_substr('A1B2C3D4E', '[^0-9]+', 1, 3) from dual;
>
> R
> -
> C
>
> select regexp_substr('A1B2C3D4E', '[^0-9]*', 1, 3) from dual;
>
> R
> -
> B
>
> Why * and + gives different answers?
>
> Thanks in advance
>
>
>
> Alex
>

Other related posts: