With python3.11, when trying to play a stream from the surfmusik plugin (and probably others), it crashes with this error:

    Traceback (most recent call last):
      File line 287, in on_play_clicked
        row = channel.play()
              ^^^^^^^^^^^^^^
      File line 606, in play
        action.play(row, audioformat, listformat)
      File line 184, in play
        run_fmt_url(row, audioformat, source, conf.play)
      File line 173, in run_fmt_url
        cmd = interpol(cmd, source, row, add_default=add_default)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File line 269, in interpol
        url = convert_playlist(row["url"], listfmt(source), listfmt(dest), local_file=True, row=row)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File line 314, in convert_playlist
        probe = cnv.probe_fmt()
                ^^^^^^^^^^^^^^^
      File line 433, in probe_fmt
        if re.search(rx, self.src, re.X|re.M|re.S):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File line 176, in search
        return _compile(pattern, flags).search(string)
               ^^^^^^^^^^^^^^^^^^^^^^^^
      File line 294, in _compile
        p = _compiler.compile(pattern, flags)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File line 743, in compile
        p = _parser.parse(p, flags)
            ^^^^^^^^^^^^^^^^^^^^^^^
      File line 980, in parse
        p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File line 455, in _parse_sub
        itemsappend(_parse(source, state, verbose, nested + 1,
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File line 863, in _parse
        p = _parse_sub(source, state, sub_verbose, nested + 1)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File line 455, in _parse_sub
        itemsappend(_parse(source, state, verbose, nested + 1,
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File line 841, in _parse
        raise source.error('global flags not at the start '
    re.error: global flags not at the start of the expression at position 25

changing line 103 of action.py from:

       ("xspf", r""" <\?xml .* <playlist .* """),

to

       ("xspf", r""" (?i)<\?xml .* <playlist .* """),

fixes the problem.