Volledige versie bekijken : Regex vaagje
xWouterx
%Europe/Berlin %437 %2008, 11:29
Ik ben niet zo goed met regex daarom dat ik hier eens kom kijken of iemand me kan helpen:
Ik wil van volgende string de regex hebben:
=LET(A:1)
A = alle hoofdletters van A tot Z waarvan ze 2 keer mogen voorkomen, dus:
=LET(AA:1)
=LET(BZ:1)
enz...
1 = alle cijfers van 0-9 waarvan ze meedere keren mogen voorkomen, dus:
=LET(A:10)
=LET(A:7)
=LET( en ) zijn vaste tekens maar LET mag ook in kleine letters
Voorlopig had ik al: /\=LET\(^[A-Z]|:|^[0-9]\)/
waarbij elke string goed is die er als vlgt uit ziet: =LET(A:0) tot =LET(AAA..AA:000...00)
Heeft iemand een idee hoe ik dit kan aanpassen tot hij klopt?
Dauntless
%Europe/Berlin %458 %2008, 11:59
var pattern:RegExp = /=(LET|let)\([A-Z]{1,2}:\d+\)/;
trace("true: ");
trace(pattern.test("=LET(A:10)"));
trace(pattern.test("=LET(A:7)"));
trace(pattern.test("=let(AA:1)"));
trace(pattern.test("=let(BZ:1)"));
trace(pattern.test("=LET(A:14656456)"));
trace("false: ");
trace(pattern.test("=LET(ABC:10)"));
trace(pattern.test("=LET(A:a)"));
trace(pattern.test("=LET(A8:1)"));
trace(pattern.test("=LET(:1)"));
trace(pattern.test("=LET(A:)"));
Het haakje is een meta char dus die moet je escapen (heb je niet op het einde gedaan). Je probeert nu te zeggen: "Dit mag er niet staan", maar het is veel eenvoudiger (en ik denk veiliger) om te zeggen: "dit moet er staan". Dus in plaats van ^[0-9] krijg je dan [A-Z].
Om aan te geven 'minimum x, maximum y' gebruik je {x,y}. Een + is enkel '1 of meer'.
En dan nog een / op het einde van je regex toevoegen en dan zou hij hetzelfde moeten zijn als de mijne :)
//EDIT
Pas je post niet aan terwijl ik reply! [:o)] Je zat er met je vorige poging immers nog vrij dicht bij :)
xWouterx
%Europe/Berlin %465 %2008, 12:10
Hehe dank je, ik denk dat ik net iets te snel om hulp vroeg :D
Ik had besloten om men regex stap voor stap op te bouwen en te testen :D
Bedankt, voor het antwoord... Ik versta ondertussen ook al wat meer van regex :-)
xWouterx
%Europe/Berlin %480 %2008, 12:31
Hoe kan ik volgende strings laten matchen met 1 regular expression:
=LET(A1:B1)
=let(A1:B1)
=Let(A1:B1)
=lEt(A1:B1)
... enzovoort
dus enkel de L E T letters mogen case insentive zijn, dit heb ik tot nu toe
/^\=LET\([A-Z]{1,2}\d{1,2}\;[A-Z]{1,2}\d{1,2}\)$/
Hoe moet ik het gedeelte van LET aanpassen zodat het klopt?
TheDutch
%Europe/Berlin %487 %2008, 12:42
Dat doe je zo:
^=(?i)let(?-i)\(A1:B1\)$
Case Insensitive: (?i)
Case Sensitive: (?-i)
Hier is een goede site om regex te leren: http://regular-expressions.com/ :)
xWouterx
%Europe/Berlin %488 %2008, 12:43
Dat doe je zo:
Case Insensitive: (?i)
Case Sensitive: (?-i)
Hier is een goede site om regex te leren: http://regular-expressions.com/ :)
Dank je, het klopt nu :D
En dank ej voor de link, zeker heel handig!
Mr. Black
%Europe/Berlin %490 %2008, 12:46
Ah, wat TheDutch zegt dus. :)
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.