I believe the mysterious underused `regexec` is for this:

s = c("foo/bar", "baz/bur", "baz", "bar")
m = regexec("(foo|baz)/(b[au]r)", s)
regmatches(s, m) |> sapply("[", 3)

The `?regex` have some examples for parsing URL using regexec.

-- Jirka

On 28/05/25 10:24, Kevin Ushey wrote:
Hi Josiah,

Why not share a reprex / something we can copy and paste to directly
reproduce the issue?

In any case, I suspect this depends on the underlying PCRE
implementation, and so isn't really directly an R issue. You might
have luck if you rewrite your regular expression from:

     (?<=(FeatureServer|MapServer)/)[0-9]+/?$

to something like (I didn't count parentheses below so assume I made a mistake)

     (?:(?<=FeatureServer)|(?<=MapServer)))/)[0-9]+/?$

Or, alternatively -- does this really need to be a lookbehind? Can you
just match that text as-is and then capture whatever you happen to
find in front of it?

Best,
Kevin

On Tue, May 27, 2025 at 3:07 PM Josiah Parry <josiah.pa...@gmail.com> wrote:
Hi all,

I've encountered an issue where using `perl = TRUE` for regular expressions
with grepl() causes an error on ubuntu CI runners only.

Is this a known limitation of perl = TRUE for grep and family in base R? Or
is there a suggested workaround?

The issue is specifically with lookbehinds:

PCRE pattern compilation error
'lookbehind assertion is not fixed length'
at '(?<=(FeatureServer|MapServer)/)[0-9]+/?$'

Any guidance would be very much appreciated! I'd like to avoid adding a
stringi dependency if possible.

         [[alternative HTML version deleted]]

______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel
______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to