[cl-ppcre-devel] Multi-line-mode
Edi Weitz
edi at agharta.de
Sun May 2 21:36:50 UTC 2004
Hi Klaus!
On Sun, 02 May 2004 22:46:23 +0200, Klaus Harbo <klaus at harbo.net> wrote:
> I have been using cl-ppcre for quite some time - great program
> library, thx! - but I am now looking to match multi-line data, and
> Iøm having some difficulties...
>
> I would expect
>
> (scan
> (create-scanner ".+" :multi-line-mode t)
> (concatenate 'string '(#\a #\Newline #\b)))
>
> to match all three characters, but it matches only #\a. I
> downloaded cl-ppcre from CVS just now to check that this occurs in
> the most recent version;
I don't really use the CVS repository at common-lisp.net. The most
recent version is usually the one available from weitz.de.
> I'm using Lispworks 4.3.6. CMUCL 18d seems to behave the same way.
>
> Can I make :everything (".") match multiple lines of input, and if
> so, how?
What you're looking for is "single-line mode", not "multi-line mode",
actually. "single-line mode" means to treat the whole target string as
if it were a single line and thus the dot also matches newlines (which
it normally doesn't). "multi-line mode" means to treat the whole
target string as if it consisted of multiple lines and thus the
anchors "^" and "$" also match around newlines in the middle of the
string (but see also "\A", "\Z", and "\z"). These two features are
orthogonal.
* (scan "(?m).+" "a
b")
0
1
#()
#()
* (scan "(?s).+" "a
b")
0
3
#()
#()
For the gory details see the Perl documentation, specifically "man
perlre" - remember that CL-PPCRE tries hard to be compatible with
Perl.
HTH,
Edi.
More information about the Cl-ppcre-devel
mailing list