Ga naar inhoud
  • 0

Regex Custom Functie voor AutoIt lijst-stijl resultaten?


Gido_

Vraag

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 naar reactie

3 antwoorden op deze vraag

Aanbevolen berichten

  • 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 = "" ; "" )
  )
)

 

aangepast door Gido_
Link naar reactie
  • 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 naar reactie
  • 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 naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...