Jump to content
  • 0

Regex Custom Functie voor AutoIt lijst-stijl resultaten?


Gido_

Question

Ik ben erg gewoon aan deze luxe in AutoIt software (en voor veel gecompliceerdere problemen dan het voorbeeld natuurlijk).

Je kan hier bv. specifiëren dat je ineens een array/lijst krijgt van alle gevonden waarden (3).

SciTE_FrOuxDHSx5.jpg.9ab28d95b771d843cfe5b484d4929722.jpg

Ik zou dit bij voorkeur graag hebben m.b.v. de BE plugin (in FM 12 Adv.), waarmee dat m.i. niet rechtstreeks mogelijk is?

https://docs.baseelementsplugin.com/article/539-beregularexpression

Maar mss met een recursieve CF die de BE_RegularExpression binnenin gebruikt?

Ik heb ook even bij briandunning gekeken en kreeg even grote hoop bij deze...

www.briandunning.com/cf/1941

Maar naar mijn indruk doet het vreemd en niet hetgeen van hierboven (al kan je al eens geluk hebben).

Kennen jullie iets dat dit al kan, of denk je dat dit recursief kan werken in een CF?

Ik heb net weer een crash gehad met een recursief probeerseltje, en de meeste vbn die ik zie "krijg ik hoofdpijn van"... :)

Vandaar de vraag of het al bestaat, of dat er vertrouwen is dat het gemaakt kan worden...?

Link to comment

3 answers to this question

Recommended Posts

  • 0

Ben er zelf dan maar ingedoken en dit is mijn eerste n00b recursive Custom Function.

Ik weet niet of het via de regels van de kunst is, maar deze werkt zoals ik gewoon ben in AutoIt.

Er moet mogelijk nog iets ingewerkt worden wat betreft BE plugin errors, hetgeen mss een "?" in _RE kan opleveren. Ik hou het simpel hier.

De functie geeft een lijst van alle hits in oorspronkelijke volgorde, zonder trailing CR (zie hierboven).

/* 
Similar to AutoIt's StringRegExp ( "test", "pattern" , 3 ) returning a hit list in order of appearance (no trailing CR).

www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm
www.clarify.net/index.php?/topic/11490-regex-custom-functie-voor-autoit-lijst-stijl-resultaten
https://docs.baseelementsplugin.com/article/539-beregularexpression

TO DO: plugin error checks, unless _RE would stay empty?

StringRegExp( test ; pattern )
*/

Let ([
  _RE = BE_RegularExpression ( test ; pattern ) ;
  _hit = If ( IsEmpty (_RE) ; 0 ; 1 ) ;
  _pos = If ( _hit ; Position ( test ; _RE  ; 1 ; 1 )  +  Length ( _RE ) ; 1 ) ;
   _test = If ( _hit ;  Middle ( test ; _pos ; 99999 ) ; test ) ;
  $r = If ( _hit ; $r & ¶ & _RE ; $r )
];

If (_hit ; StringRegExp(_test ; pattern ) ;

    Replace ( $r ; 1 ; 1 ; "" )  &  Let ( $r = "" ; "" )
  )
)

 

Edited by Gido_
Link to comment
  • 0

De 3e parameter bij _test is overbodig of fout en mag eruit, denk ik.

Correctie :

/* 
Similar to AutoIt's StringRegExp ( "test", "pattern" , 3 ) returning a hit list in order of appearance (no trailing CR).

www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm
www.clarify.net/index.php?/topic/11490-regex-custom-functie-voor-autoit-lijst-stijl-resultaten
https://docs.baseelementsplugin.com/article/539-beregularexpression

TO DO: plugin error checks, unless _RE would stay empty?

StringRegExp( test ; pattern )
*/

Let ([
  _RE = BE_RegularExpression ( test ; pattern ) ;
  _hit = If ( IsEmpty (_RE) ; 0 ; 1 ) ;
  _pos = If ( _hit ; Position ( test ; _RE  ; 1 ; 1 )  +  Length ( _RE ) ; 1 ) ;
   _test = If ( _hit ;  Middle ( test ; _pos ; 99999 ) ) ;
  $r = If ( _hit ; $r & ¶ & _RE ; $r )
];

If (_hit ; StringRegExp(_test ; pattern ) ;

    Replace ( $r ; 1 ; 1 ; "" )  &  Let ( $r = "" ; "" )
  )
)

 

Link to comment
  • 0

De 3e parameter mag ook weg hier, denk ik...

_pos = If ( _hit ; Position ( test ; _RE  ; 1 ; 1 )  +  Length ( _RE ) ; 1 ) ;

=>

_pos = If ( _hit ; Position ( test ; _RE  ; 1 ; 1 )  +  Length ( _RE ) ) ;

- - - - 

RegEx probleempje...

Wat bij de BE_RegularExpression niet lijkt te werken is \n of [^\n]

In andere regex stijlen heb je \v en \h voor vertical/horizontal space. Deze heb je niet in Perl, maar \n zou moeten werken voor newline?

Als ik bv deze 3 namen clean in een lijst wil hebben zonder de CR, dan doe ik in andere stijlen...

"John, Mark, Jan¶"  ;  "(?<=^|, )[^,\v]+(?=, |$)"

In Perl zou \n blijkbaar wel moeten werken, maar dit werkt dus niet met de BE plugin (noch een boel andere varianten) ...

 "John, Mark, Jan¶"  ;  "(?<=^|, )[^,\n]+(?=, |$)"
// of
 "John, Mark, Jan¶"  ;  "(?<=^|, )[^,]+(?=, |\n|$)"

// geven:
John
Mark
Jan
¶

Er zijn altijd andere manieren, maar het is wel sneu... ;)

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...