Página 1 de 1
HB_RegExReplace()
Publicado: Vie Ene 19, 2018 8:57 am
por Timm
Hi!
Harbour has almost all regular expression functions of xHarbour but I am missing HB_RegExReplace.
Is there a similar function in Harbour?
Best regards, Timm.
Re: HB_RegExReplace()
Publicado: Sab Ene 20, 2018 1:09 pm
por ftwein
Hi,
hb_regexReplace is in xhb contrib.
Check it in the library list.
Regards, Fausto.
Re: HB_RegExReplace()
Publicado: Lun Ene 22, 2018 9:44 am
por ignacio
Hi Fausto,
Thanks for the advice.
Regards,
Re: HB_RegExReplace()
Publicado: Lun Ene 22, 2018 7:14 pm
por Timm
Hi!
Did not found that library. Is it not only part of xHarbour?
Best regards, Timm.
Re: HB_RegExReplace()
Publicado: Lun Ene 22, 2018 8:05 pm
por ignacio
Timm escribió:Hi!
Did not found that library. Is it not only part of xHarbour?
Best regards, Timm.
I guess is libxhb.a. Is a compatibility library for xHarbour.
BTW, here is the code. Just include it on any PRG file. I hope it works. At least it links
Código: Seleccionar todo
/*
* xHarbour Project source code:
* hb_regexReplace( cRegex, cString, cReplace, lCaseSensitive, lNewLine, nMaxMatches, nGetMatch ) --> cReturn
*
* Copyright 2006 Francesco Saverio Giudice <info/at/fsgiudice.com>
* www - http://www.xharbour.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING.txt. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, xHarbour license gives permission for
* additional uses of the text contained in its release of xHarbour.
*
* The exception is that, if you link the xHarbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the xHarbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released with this xHarbour
* explicit exception. If you add/copy code from other sources,
* as the General Public License permits, the above exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for xHarbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
#define MATCH_STRING 1
#define MATCH_START 2
#define MATCH_END 3
FUNCTION hb_regexReplace( cRegex, cString, cReplace, lCaseSensitive, lNewLine, nMaxMatches, nGetMatch )
LOCAL aMatches, aMatch
LOCAL cReturn
LOCAL nOffSet := 0
LOCAL cSearch, nStart, nLenSearch, nLenReplace
aMatches := hb_regexAll( cRegEx, cString, lCaseSensitive, lNewLine, nMaxMatches, nGetMatch, .F. )
cReturn := cString
IF ! Empty( aMatches )
FOR EACH aMatch IN aMatches
IF HB_ISARRAY( aMatch ) .AND. Len( aMatch ) >= 1 .AND. ;
HB_ISARRAY( aMatch[ 1 ] )
aMatch := aMatch[ 1 ]
IF Len( aMatch ) == 3 // if regex matches I must have an array of 3 elements
cSearch := aMatch[ MATCH_STRING ]
nStart := aMatch[ MATCH_START ]
nLenSearch := Len( cSearch )
nLenReplace := Len( cReplace )
cReturn := Stuff( cReturn, nStart - nOffSet, nLenSearch, cReplace )
nOffSet += nLenSearch - nLenReplace
ENDIF
ENDIF
NEXT
ENDIF
RETURN cReturn
Re: HB_RegExReplace()
Publicado: Mar Ene 23, 2018 8:06 am
por Timm
Hi Ignacio,
yes, HB_RegExReplace() is part of libxhb.a.
Many thanks!
Best regards, Timm.