shankardevy
shankardevy

Reputation: 4370

What is the erlang regex equivalent of this?

The subject of my regex is

"Digest realm=\"Protected Area\", nonce=\"MTQzNTMwMDI5OSA2ZmIxYWEzYzNkZjQzNmVlZDdiMjU1ZjZjNzQwYjJkNA==\", opaque=\"610a2ee688cda9e724885e23cd2cfdee\", qop=\"auth\""

The following regex works for me in Ruby. http://rubular.com/r/m3SRmHUd5V

/([\w\s]+)=\\"([\w\s]+)/

However, I am unable to findout how to do the same in Erlang. I tried this but it doesn't work.

RegexS = "([\w\s]+)=\\\"([\w\s]+)"

re:run(Subject,RegexS, [global, {capture, first, list}]).

Any help is greatly appreciated. Thanks.

Upvotes: 1

Views: 127

Answers (1)

Hynek -Pichi- Vychodil
Hynek -Pichi- Vychodil

Reputation: 26121

You need to escape all backslashes.

1> Subject = "Digest realm=\"Protected Area\", nonce=\"MTQzNTMwMDI5OSA2ZmIxYWEzYzNkZjQzNmVlZDdiMjU1ZjZjNzQwYjJkNA==\", opaque=\"610a2ee688cda9e724885e23cd2cfdee\", qop=\"auth\"".
"Digest realm=\"Protected Area\", nonce=\"MTQzNTMwMDI5OSA2ZmIxYWEzYzNkZjQzNmVlZDdiMjU1ZjZjNzQwYjJkNA==\", opaque=\"610a2ee688cda9e724885e23cd2cfdee\", qop=\"auth\""
2> RegexS = "([\\w\\s]+)=\\\"([\\w\\s]+)".
"([\\w\\s]+)=\\\"([\\w\\s]+)"
3> re:run(Subject,RegexS, [global, {capture, first, list}]).
{match,[["Digest realm=\"Protected Area"],
        [" nonce=\"MTQzNTMwMDI5OSA2ZmIxYWEzYzNkZjQzNmVlZDdiMjU1ZjZjNzQwYjJkNA"],
        [" opaque=\"610a2ee688cda9e724885e23cd2cfdee"],
        [" qop=\"auth"]]}
4> io:format("~p => /~s/~n", [RegexS, RegexS]).
"([\\w\\s]+)=\\\"([\\w\\s]+)" => /([\w\s]+)=\"([\w\s]+)/
ok
5>

But you don't have to backslash " because " has no special meaning in regexp.

5> RegexS2 = "([\\w\\s]+)=\"([\\w\\s]+)".                   
"([\\w\\s]+)=\"([\\w\\s]+)"
6> re:run(Subject,RegexS2, [global, {capture, first, list}]).
{match,[["Digest realm=\"Protected Area"],
        [" nonce=\"MTQzNTMwMDI5OSA2ZmIxYWEzYzNkZjQzNmVlZDdiMjU1ZjZjNzQwYjJkNA"],
        [" opaque=\"610a2ee688cda9e724885e23cd2cfdee"],
        [" qop=\"auth"]]}
7> v(-1) =:= v(3).
true
8> io:format("~p => /~s/~n", [RegexS2, RegexS2]).            
"([\\w\\s]+)=\"([\\w\\s]+)" => /([\w\s]+)="([\w\s]+)/
ok
9>

Upvotes: 4

Related Questions