Lisp HUG Maillist Archive

lw:find-regexp-in-string signals "Cannot find that; regexp is too unconstrained"

Hello lispworkers,

I have got rather vague error on LWW 4.4.6.
I am trying to find positions of bbcode tags, e.g. [b] and [/b], within a
string.

CL-USER 1 > (lw:find-regexp-in-string "\\[[^[]*\\]"
 "aaaaaaa bbbbbbbbbb cccccccc dd[/b] eeee ffffffffffffffffff
ggggggggggggggggggggggggg  hhhhhhhhhhhhhh. iiiiiiiiiiiiiiiiiiiiiiiii
jjjjjjjjjjjjjjjjjjjjj. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk lllllll.
mmmmmmmmmmmmmmmmmmmmmmmmm nnnnnnnnn")
=> 30, 4  ; fine with string of length 230

CL-USER 2 > (lw:find-regexp-in-string "\\[[^[]*\\]"
 "aaaaaaa bbbbbbbbbb cccccccc dd[/b] eeee ffffffffffffffffff
ggggggggggggggggggggggggg  hhhhhhhhhhhhhh. iiiiiiiiiiiiiiiiiiiiiiiii
jjjjjjjjjjjjjjjjjjjjj. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk lllllll.
mmmmmmmmmmmmmmmmmmmmmmmmm nnnnnnnnn1")
=> Cannot find that; regexp is too unconstrained
 ; Error with string of length 231

Can anybody reproduce this?
--
Sincerely,
Dmitriy Ivanov


Re: lw:find-regexp-in-string signals "Cannot find that; regexp is too unconstrained"

On Tue, Aug 5, 2008 at 12:55 PM, Dmitriy Ivanov <divanov@aha.ru> wrote:
>
> Hello lispworkers,
>
> I have got rather vague error on LWW 4.4.6.
> I am trying to find positions of bbcode tags, e.g. [b] and [/b], within a
> string.
>
> CL-USER 1 > (lw:find-regexp-in-string "\\[[^[]*\\]"
>  "aaaaaaa bbbbbbbbbb cccccccc dd[/b] eeee ffffffffffffffffff
> ggggggggggggggggggggggggg  hhhhhhhhhhhhhh. iiiiiiiiiiiiiiiiiiiiiiiii
> jjjjjjjjjjjjjjjjjjjjj. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk lllllll.
> mmmmmmmmmmmmmmmmmmmmmmmmm nnnnnnnnn")
> => 30, 4  ; fine with string of length 230
>
> CL-USER 2 > (lw:find-regexp-in-string "\\[[^[]*\\]"
>  "aaaaaaa bbbbbbbbbb cccccccc dd[/b] eeee ffffffffffffffffff
> ggggggggggggggggggggggggg  hhhhhhhhhhhhhh. iiiiiiiiiiiiiiiiiiiiiiiii
> jjjjjjjjjjjjjjjjjjjjj. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk lllllll.
> mmmmmmmmmmmmmmmmmmmmmmmmm nnnnnnnnn1")
> => Cannot find that; regexp is too unconstrained
>  ; Error with string of length 231
>
> Can anybody reproduce this?
> --
> Sincerely,
> Dmitriy Ivanov

On LWM 5.1.1 PPC, I get the same problem:

CL-USER 1 > (lw:find-regexp-in-string "\\[[^[]*\\]"
 "aaaaaaa bbbbbbbbbb cccccccc dd[/b] eeee ffffffffffffffffff
ggggggggggggggggggggggggg  hhhhhhhhhhhhhh. iiiiiiiiiiiiiiiiiiiiiiiii
jjjjjjjjjjjjjjjjjjjjj. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk lllllll.
mmmmmmmmmmmmmmmmmmmmmmmmm nnnnnnnnn")
30
4

CL-USER 2 > (lw:find-regexp-in-string "\\[[^[]*\\]"
 "aaaaaaa bbbbbbbbbb cccccccc dd[/b] eeee ffffffffffffffffff
ggggggggggggggggggggggggg  hhhhhhhhhhhhhh. iiiiiiiiiiiiiiiiiiiiiiiii
jjjjjjjjjjjjjjjjjjjjj. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk lllllll.
mmmmmmmmmmmmmmmmmmmmmmmmm nnnnnnnnn1")

Error: Cannot find that; regexp is too unconstrained
  1 (abort) Return to level 0.
  2 Return to top loop level 0.

Type :b for backtrace, :c <option number> to proceed,  or :? for other options

CL-USER 3 : 1 >

//Joshua Taylor


Re: lw:find-regexp-in-string signals "Cannot find that; regexp is too unconstrained"

Unable to parse email body. Email id is 8472

Re: lw:find-regexp-in-string signals "Cannot find that; regexp is too unconstrained"

On Tue, 5 Aug 2008 20:55:46 +0400, "Dmitriy Ivanov" <divanov@aha.ru> wrote:

> I am trying to find positions of bbcode tags, e.g. [b] and [/b],
> within a string.
>
> CL-USER 1 > (lw:find-regexp-in-string "\\[[^[]*\\]"
>  "aaaaaaa bbbbbbbbbb cccccccc dd[/b] eeee ffffffffffffffffff
> ggggggggggggggggggggggggg  hhhhhhhhhhhhhh. iiiiiiiiiiiiiiiiiiiiiiiii
> jjjjjjjjjjjjjjjjjjjjj. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk lllllll.
> mmmmmmmmmmmmmmmmmmmmmmmmm nnnnnnnnn")
> => 30, 4  ; fine with string of length 230
>
> CL-USER 2 > (lw:find-regexp-in-string "\\[[^[]*\\]"
>  "aaaaaaa bbbbbbbbbb cccccccc dd[/b] eeee ffffffffffffffffff
> ggggggggggggggggggggggggg  hhhhhhhhhhhhhh. iiiiiiiiiiiiiiiiiiiiiiiii
> jjjjjjjjjjjjjjjjjjjjj. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk lllllll.
> mmmmmmmmmmmmmmmmmmmmmmmmm nnnnnnnnn1")
> => Cannot find that; regexp is too unconstrained
>  ; Error with string of length 231

Shameless plug: You might want to try CL-PPCRE.

  CL-USER 15 > (defun foo (n)
                 (ppcre:scan "\\[[^[]*\\]"
                             (lw:string-append "aaaaaaa bbbbbbbbbb cccccccc dd[/b] "
                                               (make-string n :initial-element #\a))))
  FOO

  CL-USER 16 > (compile 'foo)
  FOO
  NIL
  NIL

  CL-USER 17 > (time (foo 10000))
  Timing the evaluation of (FOO 10000)

  User time    =        0.015
  System time  =        0.000
  Elapsed time =        0.016
  Allocation   = 20056 bytes
  0 Page faults
  30
  34
  #()
  #()

  CL-USER 18 > (time (foo 100000))
  Timing the evaluation of (FOO 100000)

  User time    =        0.015
  System time  =        0.000
  Elapsed time =        0.032
  Allocation   = 200056 bytes
  0 Page faults
  30
  34
  #()
  #()

  CL-USER 19 > (time (foo 1000000))
  Timing the evaluation of (FOO 1000000)

  User time    =        0.203
  System time  =        0.000
  Elapsed time =        0.188
  Allocation   = 2002788 bytes
  0 Page faults
  30
  34
  #()
  #()

  CL-USER 20 > (time (foo 100000000))
  Timing the evaluation of (FOO 100000000)

  User time    =        6.609
  System time  =        0.015
  Elapsed time =        6.437
  Allocation   = 200004772 bytes
  0 Page faults
  30
  34
  #()
  #()

For your particular pattern you probably want non-greedy matching:

  CL-USER 21 > (defun foo% (n)
                 (ppcre:scan "\\[[^[]*?\\]"
                             (lw:string-append "aaaaaaa bbbbbbbbbb cccccccc dd[/b] "
                                               (make-string n :initial-element #\a))))
  FOO%

  CL-USER 22 > (compile *)
  FOO%
  NIL
  NIL

  CL-USER 23 > (time (foo% 100000000))
  Timing the evaluation of (FOO% 100000000)

  User time    =        0.312
  System time  =        0.000
  Elapsed time =        0.313
  Allocation   = 200003560 bytes
  0 Page faults
  30
  34
  #()
  #()

HTH,
Edi.


Updated at: 2020-12-10 08:42 UTC