Skip to content

Commit

Permalink
Add predefined character class \D (no digit)
Browse files Browse the repository at this point in the history
Matches every character except digits (`0` to `9`).

In PureBasic this means:

- `Chr(1)` to `Chr(47)`

- `Chr(58)` to `Chr(65535)`

Close #23
  • Loading branch information
SicroAtGit committed Dec 31, 2021
1 parent 66ed1b3 commit 0b7aab6
Showing 1 changed file with 41 additions and 0 deletions.
41 changes: 41 additions & 0 deletions RegExEngine.pbi
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,44 @@ Module RegEx
ProcedureReturn *base
EndProcedure

Procedure CreateNfaNoDigits(*regExEngine)
Protected *base, *nfa1, *nfa2
Protected i

; Chr(1) to Chr(47)
; Chr(58) to Chr(65535)

; nfa1 nfa2
; [1-47] [0]
; [58-255] [0]

*nfa1 = CreateNfaSymbol(*regExEngine, 1)
For i = 2 To 47
*nfa1 = CreateNfaUnion(*regExEngine, *nfa1, CreateNfaSymbol(*regExEngine, i))
Next
For i = 58 To 255
*nfa1 = CreateNfaUnion(*regExEngine, *nfa1, CreateNfaSymbol(*regExEngine, i))
Next
*nfa2 = CreateNfaSymbol(*regExEngine, 0)
*base = CreateNfaConcatenation(*regExEngine, *nfa1, *nfa2)

; nfa1 nfa2
; [0-255] [1-255]

*nfa1 = CreateNfaSymbol(*regExEngine, 0)
For i = 1 To 255
*nfa1 = CreateNfaUnion(*regExEngine, *nfa1, CreateNfaSymbol(*regExEngine, i))
Next
*nfa2 = CreateNfaSymbol(*regExEngine, 1)
For i = 2 To 255
*nfa2 = CreateNfaUnion(*regExEngine, *nfa2, CreateNfaSymbol(*regExEngine, i))
Next
*base = CreateNfaUnion(*regExEngine, *base,
CreateNfaConcatenation(*regExEngine, *nfa1, *nfa2))

ProcedureReturn *base
EndProcedure

Procedure CreateNfaWhiteSpace(*regExEngine)
Protected *base, *nfa1, *nfa2

Expand Down Expand Up @@ -383,6 +421,9 @@ Module RegEx
Case 'd'
*regExString\currentPosition + SizeOf(Unicode)
ProcedureReturn CreateNfaDigits(*regExEngine)
Case 'D'
*regExString\currentPosition + SizeOf(Unicode)
ProcedureReturn CreateNfaNoDigits(*regExEngine)
Case 's'
*regExString\currentPosition + SizeOf(Unicode)
ProcedureReturn CreateNfaWhiteSpace(*regExEngine)
Expand Down

0 comments on commit 0b7aab6

Please sign in to comment.