Home > other >  SAS Using $ in Regex
SAS Using $ in Regex

Time:04-07

I have a load of ID's that I want to flag if it ends in a slash and one or two digits. (/00, /01, /0)

Some ID's contain slashes in the middle that I don't want to flag.

So I want my result to be:

ID                Flag
P-MTP00197854/03    X
P-MTP00197868/02    X
P-MTP00197882/00    X
P-HMF00197730   
WI/B09/077094   
Q-MTP00197735   
Q-HMF00199313/0     X

I'd expect this function to do the job, but it doesn't detect anything:

if prxmatch("/\/\d{1,2}$/", ID) then Flag='X';

If I remove the $ sign, it detects what I want, but it also includes those ID's with slashes in the middle as it isn't starting at the end.

I've tested it on regex101 and it should work. Am I missing something here?

CodePudding user response:

To prevent a partial match, you can use a word boundary. To make sure that there is no more / to the right you can use a positive lookahead asserting not more occurrences of / to the right

\/\d{1,2}\b(?=[^\r\n\/]*$)

See a regex demo.

Or the other way around with a negative lookahead, asserting no / to the right:

\/\d{1,2}\b(?![^\/\r\n]\/)

See another regex demo.

  • Related