Go Premium for a chance to win a PS4. Enter to Win

x
Solved

# perl, strip spaces and  double quote character at beginning and at the end of a string

Posted on 2010-08-19
Medium Priority
569 Views
How do I strip spaces and double quote character at beginning and at the end of a string, if the double quote exist?

\$string1 = "\"my string1\"";  # => to "my string1"
\$string2 = "  \" my string2 \"  "; #=> to " mystring2 "
0
Question by:rgbcof
• 3
• 3
• 2
• +2

LVL 10

Accepted Solution

jeromee earned 252 total points
ID: 33478895
s/(^\s*")|("\s*\$)//g;
0

LVL 3

Expert Comment

ID: 33479545
Does '\' specify the part where the string starts/ends. If so you could use that as a delimiter as well.

Using your logic - if double quotes and spaces appear at the start and end of strong
\$string1 =~ s/^[ "]*//; # delete all spaces and double quotes 0 0r more occurrences
\$string1 =~ s/[ "]*\$//;

alternately
\$string1 = /^[^"]*([^\\]*)\\".*/\$1"/;
0

LVL 27

Expert Comment

ID: 33479555
This should do it:

\$string =~ s{^[\s"]+}{};
\$string =~ s{[\s"]+\$}{};

Using | as jeromee did above will sometimes work and sometimes not.  For example,

\$string =~ s{(?:^[\s"]+)|([\s"]+\$)}{};

does not work.
0

LVL 85

Assisted Solution

ozo earned 248 total points
ID: 33479973
s/^\s*"//,s/"\s*\$// for \$string1,\$string2 ;
0

LVL 85

Expert Comment

ID: 33480017
\$string =~ s{(?:^[\s"]+)|([\s"]+\$)}{}g; #works, but the g is required, and it is not as fast as s{^[\s"]+}{} and s{[\s"]+\$}{}; separately, if you care about that
also, it does
\$string2 = "  \" my string2 \"  "; #=> to "mystring2"
unlike the requested
\$string2 = "  \" my string2 \"  "; #=> to " mystring2 "
0

LVL 10

Expert Comment

ID: 33480100
I think the initial answer I posted:
s/(^\s*")|("\s*\$)//g;
works for both strings.
0

LVL 85

Expert Comment

ID: 33480145
Yes, it does work for both strings.
0

LVL 27

Expert Comment

ID: 33480712
sigh - yep - I made two mistakes in my comment as ozo pointed out.  I left off the g on the "doesn't work" example (so it does work) and I misread the request so used char classes which are efficient but don't work in this case.

jeromee, yes, your answer worked.  I should have been more clear - I was trying to give a different example that didn't work (and failed at that as well).

Apparently my brain is dead today...
0

Author Closing Comment

ID: 33480905
You guys are such perl/regex expert.  I am so jealous.
0

LVL 10

Expert Comment

ID: 33480938
If you play with regex regularly it gets easier, and it quickly loses its "crypticness", I promise!

Good luck.
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I've just discovered very important differences between Windows an Unix formats in Perl,at least 5.xx.. MOST IMPORTANT: Use Unix file format while saving Your script. otherwise it will have ^M s or smth likely weird in the EOL, Then DO NOT use mâ€¦
In the distant past (last year) I hacked together a little toy that would allow a couple of Manager types to query, preview, and extract data from a number of MongoDB instances, to their tool of choice: Excel (http://dilbert.com/strips/comic/2007-08â€¦
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: Tâ€¦
Six Sigma Control Plans
###### Suggested Courses
Course of the Month7 days, 8 hours left to enroll

#### 824 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.