BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
RajasekharReddy
Fluorite | Level 6

Hi,

 

Can any body explaine below code (PRXCHANGE) 

 

I don't understand why they are using '#' and 'S'

 

DIR=prxchange("s#/+#/#", -1, DIR);

 

DIR=prxchange("s#^(/project\d+/)#/projects/#", 1, cats(DIR));

 

Thank you in Advance

1 ACCEPTED SOLUTION

Accepted Solutions
FriedEgg
SAS Employee

the 's' before the regular expression is referred to as a pattern-matching modifier, and denotes that the expression is a substition/replacement expression.

 

the '#' is just acting as a delimiter.  common delimiters are "/" or "#" or "{}" or "[]" typically

 

s#/+#/#

=

s/\/+/\//

When you use # instead of / as the delimiter, you make a pattern matching expression that would normally use the default delimiter, like the example, simpler, since you don't have to escape it

 

The patter above is simple:

 

match the "/" character 1 or more times, as many as possible without encounter some other token and replace that match with a single "/"

 

s#^(/project\d+/)#/projects/#

or

s#^/project\d+/#/projects/#

or 

s/^\/project\d+\//\/projects\//

matches a string where, at the beginning is starts with "/project" followed by 1 or more numbers and ending with "/" such as "/project1234/" and changes it to "/projects/"

View solution in original post

2 REPLIES 2
gamotte
Rhodochrosite | Level 12
Hello,

The search patterns contain slashes so the '#' are used in place of the '/' as patterns delimiters.
It avoids having to protect the '/'.
's' is the substitution operator.
So the first command, for instance, replaces several consecutive slashes by a unique slash in the DIR string.
FriedEgg
SAS Employee

the 's' before the regular expression is referred to as a pattern-matching modifier, and denotes that the expression is a substition/replacement expression.

 

the '#' is just acting as a delimiter.  common delimiters are "/" or "#" or "{}" or "[]" typically

 

s#/+#/#

=

s/\/+/\//

When you use # instead of / as the delimiter, you make a pattern matching expression that would normally use the default delimiter, like the example, simpler, since you don't have to escape it

 

The patter above is simple:

 

match the "/" character 1 or more times, as many as possible without encounter some other token and replace that match with a single "/"

 

s#^(/project\d+/)#/projects/#

or

s#^/project\d+/#/projects/#

or 

s/^\/project\d+\//\/projects\//

matches a string where, at the beginning is starts with "/project" followed by 1 or more numbers and ending with "/" such as "/project1234/" and changes it to "/projects/"

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 1444 views
  • 2 likes
  • 3 in conversation