DATA Step, Macro, Functions and more

Regular Expression

Accepted Solution Solved
Reply
Contributor
Posts: 31
Accepted Solution

Regular Expression

[ Edited ]

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


Accepted Solutions
Solution
‎02-20-2017 04:46 AM
Trusted Advisor
Posts: 1,301

Re: Regular Expression

[ Edited ]
Posted in reply to RajasekharReddy

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


All Replies
Regular Contributor
Posts: 240

Re: Regular Expression

Posted in reply to RajasekharReddy
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.
Solution
‎02-20-2017 04:46 AM
Trusted Advisor
Posts: 1,301

Re: Regular Expression

[ Edited ]
Posted in reply to RajasekharReddy

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/"

☑ This topic is solved.

Need further help from the community? Please ask a new question.

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