Маска @ персонажа в SAS RegEX - PullRequest
       6

Маска @ персонажа в SAS RegEX

0 голосов
/ 21 февраля 2020

Символ @ (выделен жирным шрифтом) в строке замены моего RegEx s / << [\ w | + | @ | #] + >> / \ s * (<< [\ w | \ + | # <strong>| @ ] + >>) \ s * / вызывает ошибку. Когда я заменяю RegEx на s / << [\ w | + | @ | #] + >> / \ s * (<< [\ w | \ + | #] + >>) \ s * /, возникает ошибка уходит.

Как замаскировать символ @. %NRSTR не похоже на работу.

КОД:

Data _NULL_;
    a=prxchange(%NRSTR("s/<<[\w|\+|@|#]+>>/\s*(<<[\\w|\\+|#|@]+>>)\s*/"), -1, "<<A>> <<A+>> <<A@>> <<A@+>> <<A#>> <<A#+>>");
    putlog a;
run;

LOG:

ERROR: An array reference was found in replacement text

       "s/<<[\w|\+|@|#]+>>/\s*(<<[\\w|\\+|#|@]+>>)\s*/". Array references within replacement text

       are not supported.

ERROR: The regular expression passed to the function PRXCHANGE contains a syntax error.

NOTE: Argument 1 to function PRXCHANGE('s/<<[\w|\+|@'[12 of 46 characters shown],-1,'<<WORD>>

      <<W'[12 of 60 characters shown]) at line 1656 column 3 is invalid.



a=  _ERROR_=1 _N_=1

1 Ответ

0 голосов
/ 21 февраля 2020

Это то, что вы хотите? Я добавил escape-символ перед амперсандами.

data _null_;
  length regex in out $200 ;
  regex='s/<<[\w|\+|\@|#]+>>/\s*(<<[\\w|\\+|#|\@]+>>)\s*/';
  in = '<<A>> <<A+>> <<A@>> <<A@+>> <<A#>> <<A#+>>';
  out=prxchange(regex,-1,in);
  putlog (_all_) (//= :$quote.);
run;

Результаты:

regex="s/<<[\w|\+|\@|#]+>>/\s*(<<[\\w|\\+|#|\@]+>>)\s*/"

in="<<A>> <<A+>> <<A@>> <<A@+>> <<A#>> <<A#+>>"

out="s*(<<[\w|\+|#|@]+>>)s* s*(<<[\w|\+|#|@]+>>)s* s*(<<[\w|\+|#|@]+>>)s* s*(<<[\w|\+|#|@]+>>)s* s*(<<[\w|\
+|#|@]+>>)s* s*(<<[\w|\+|#|@]+>>)s*"
...