2

In perl when matching multi-line strings you can add the s modifier /.../s that will change the semantics of . to match also newline. Is there something similar for string-match? Or is there a workaround?

4
  • Are you asking for a way to convert regular expressions that have . to additionally match new lines or how to match any character including newline in general? Commented Oct 12, 2019 at 19:54
  • 2
    FWIW, I asked that this ability be added to Elisp regexps long ago: 1 and 2. Went nowhere...
    – Drew
    Commented Oct 12, 2019 at 23:37
  • @Drew: For the perl m modifier I can used instead of ^ and $ the escaped `` \` `` and `` \' `` (hard to write in markdown). But for . it doesnt seem to exist. Feels indeed like something that would be helpful if added. Phils answer below does work. I tried before with [[:asci:][:nonascii]] but stangely that failes if there is a unicode sequence embedded in the textstream anyway. Commented Oct 13, 2019 at 6:28
  • Yes, @phils's answer is what we have to do (and have always had to do): specify "either a newline char or a char other than newline". My comment was to point out that I think Elisp regexps should offer a short way of specifying that.
    – Drew
    Commented Oct 13, 2019 at 14:58

1 Answer 1

1

No, you can't make . match newlines; you have to simply state what you want to match. e.g.: "\\(?:.\\|\n\\)"

However if you use rx to generate your regexp, then note that it provides distinct symbols for the two cases:

`not-newline', `nonl'
     matches any character except a newline.

`anything'
     matches any character

e.g.:

(rx "foo" anything "bar")
=> "foo\\(?:.\\|
\\)bar"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.