Hello,
Chris Dennis <address@hidden> writes:
Hello Guile People
Is there a way to make Guile regular expressions less greedy? I
understand that POSIX doesn't define non-greedy modifiers.
Specifically, I'm trying to parse font names such as
Arial 12
Arial Bold Italic 14
Nimbus Sans L Bold Italic Condensed 11
so that I can construct CSS styles from them.
I've tried the following, but the first (.*) gobbles up everything
before the size because the other elements are optional:
(define s (string-match "(.*)( +(bold|semi-bold|regular|light))?(
+(italic|oblique))?( +(condensed))? +([0-9]+)" "nimbus sans l bold
italic condensed 11"))
Here's a possible solution:
--8<---------------cut here---------------start------------->8---
scheme@(guile-user)> (define rx (make-regexp "^([^ ]+)(
+(bold|semi-bold|regular|light))?( +(italic|oblique))?( +(condensed))? +([0-9]+)"
regexp/extended))
scheme@(guile-user)> (define m (regexp-exec rx "nimbus bold italic condensed
11"))
scheme@(guile-user)> (match:substring m 1)
"nimbus"
scheme@(guile-user)> (match:substring m 2)
" bold"
scheme@(guile-user)> (match:substring m 3)
"bold"
scheme@(guile-user)> (match:substring m 4)
" italic"
scheme@(guile-user)> (match:substring m 5)
"italic"
--8<---------------cut here---------------end--------------->8---
Note that I slightly modified the string that's matched because "sans"
and "l" are not meant to be matched.
Hope this helps,
Ludo'.