FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour OT: RegEx
Posts: 1096
Joined: Fri Oct 28, 2005 02:27 AM
OT: RegEx
Posted: Mon Mar 08, 2010 08:18 AM
Do we have any regex guru here?

String in question,
Code (fw): Select all Collapse
"2601-2650 21 - - - - - - - - - - -21 15 - - - - - - - - - "


I want to capture the 2nd occurrence of "-2". I came up with "[^\d]-\d" but it'll return " -2" (preceded by a space) not "-2"

TIA
FWH 11.08/FWH 19.12

BCC5.82/BCC7.3

xHarbour/Harbour
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: OT: RegEx
Posted: Mon Mar 08, 2010 12:19 PM
I do not know anything about RegEx.
But if the purpose is limited to finding second ( or nth ) occurrence of a string in another string, we have enough built-in functions in (x)Harbour.
Code (fw): Select all Collapse
   c  := "2601-2650 21 - - - - - - - - - - -21 15 - - - - - - - - - "
   n  := AtNum( "-2", c, 2 ) // find '-2' in c 2nd occurrence
   ? n    // 34
   ? SubStr( c, n  )  // "-21 15 --    "

We need to link ct.lib of xHarbour or hbct.lib of Harbour
Regards



G. N. Rao.

Hyderabad, India
Posts: 603
Joined: Sun May 04, 2008 08:44 PM
Re: OT: RegEx
Posted: Mon Mar 08, 2010 02:35 PM

"-([0-9]{1,})"

Posts: 1096
Joined: Fri Oct 28, 2005 02:27 AM
Re: OT: RegEx
Posted: Mon Mar 08, 2010 03:32 PM

@Rao,
Thanks for the tip. I didn't know about AtNum() but regular expression kinda fascinates me now. I'm parsing a tax table and I find regular expression allows me to write neat and tidy code and regex power is awesome. Though it's kinda dizzying as it's another new thing to learn :)

@Lailton,
I just noticed I made a typo. A thousand apologies, the result that I'm after is "-2" not "21". Sorry for the confusion to anyone who's reading this thread. But your expression seems better than mine I'll test it out. Thanks.

FWH 11.08/FWH 19.12

BCC5.82/BCC7.3

xHarbour/Harbour
Posts: 603
Joined: Sun May 04, 2008 08:44 PM
Re: OT: RegEx
Posted: Mon Mar 08, 2010 05:49 PM

what´s the result that u wanna

"2601-2650 21 - - - - - - - - - - -21 15 - - - - - - - - - "

is ?
-26
-21

Posts: 603
Joined: Sun May 04, 2008 08:44 PM
Re: OT: RegEx
Posted: Mon Mar 08, 2010 06:02 PM
function main

local i, aMatch
local er :="([-][2][0-9])"
local cString:="2601-2650 21 - - - - - - - - - - -21 15 - - - - - - - - - "

aMatch := HB_RegExAll( er, cString, .f., .t. )

if (aMatch != Nil)

for i = 1 to len(aMatch)
alert(aMatch[i][1])
next i

else

alert("Not found !")

endif

return


I dont know if a understand what u wanna more try this, the return is -26 and -21.
Posts: 1096
Joined: Fri Oct 28, 2005 02:27 AM
Re: OT: RegEx
Posted: Tue Mar 09, 2010 02:04 AM
lailton.webmaster wrote:what´s the result that u wanna

"2601-2650 21 - - - - - - - - - - -21 15 - - - - - - - - - "

is ?
-26
-21


Hi Lailton,
I'm after the 2nd occurrence of "a hyphen followed by a digit". To make it clearer, let me expand the data to process
Code (fw): Select all Collapse
2601-2650 21 - - - - - - - - - - -21 15 - - - - - - - - -
3801-3850 146 54 48 42 37 31 25 19 13 - - -146 136 93 87 82 76 70 64 58 52 47
3851-3900 152 58 52 46 40 34 28 23 17 11 - -152 142 132 91 85 79 73 68 62 56 50
3901-3950 158 128 55 49 44 38 32 26 20 14 - -158 148 138 128 89 83 77 71 65 59 54
3951-4000 164 134 59 53 47 41 35 30 24 18 12 -164 154 144 134 92 86 80 75 69 63 57
4001-4050 170 140 130 56 51 45 39 33 27 21 16 10 170 160 150 140 130 90 84 78 72 66 61


The result that I'm hoping to see for each line above respectively would be;

-2
-1
-1
-1
-1
< none >

Thank you.
FWH 11.08/FWH 19.12

BCC5.82/BCC7.3

xHarbour/Harbour
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: OT: RegEx
Posted: Tue Mar 09, 2010 03:54 AM

Hua,

local er :="([-][0-9])"

that may work

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1096
Joined: Fri Oct 28, 2005 02:27 AM
Re: OT: RegEx
Posted: Tue Mar 09, 2010 05:01 AM

Hey, you're very close Antonio :). Now just need to tweak it further to make it ignore hyphen and digit in column 5 & 6.
Thank you.

FWH 11.08/FWH 19.12

BCC5.82/BCC7.3

xHarbour/Harbour
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
Re: OT: RegEx
Posted: Tue Mar 09, 2010 03:59 PM

Hi,

try with

local er :="(\ [-][0-9])"

regards

Marcelo

Posts: 1096
Joined: Fri Oct 28, 2005 02:27 AM
Re: OT: RegEx
Posted: Fri Mar 12, 2010 01:24 AM

Thanks Marcelo. But that didn't do it

FWH 11.08/FWH 19.12

BCC5.82/BCC7.3

xHarbour/Harbour
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
Re: OT: RegEx
Posted: Fri Mar 12, 2010 01:47 AM
Hi,

it is starnge, because in my test it work, I put the string "2601-2650 21 - - - - - - - - - - -21 15 - - - - - - - - - " and the result was only -2
mybe "( +[-][0-9])" (space+[-][0-9])




hua wrote:Thanks Marcelo. But that didn't do it
Posts: 603
Joined: Sun May 04, 2008 08:44 PM
Re: OT: RegEx
Posted: Fri Mar 12, 2010 03:20 PM

([ ]?[-][0-9])

Continue the discussion