tags:

views:

60

answers:

3

Hi, how can I match all characters between 2 characters, say " " -> from sdfsf " 12asdf " sdf

I get only 12asdf.

Thanks

+6  A: 

You can the following to get everything between " ", including the leading and trailing white spaces:

"(.*?)"

or

"([^"]*)"

If you want to capture everything between the " " excluding the leading and trailing white spaces you can do:

"\s*(.*?)\s*"

or

"\s*([^"]*)\s*"
codaddict
Agreed. Make sure to look up anything you can find on "non-greedy" (vs. "greedy") expressions. Should be an interesting read if you don't know it yet. And it will surely make your life with regexes easier if you know the difference.
exhuma
A: 

You can use preg_match(/"([^"]*)"/,$input,$matches); $matches[1] will have what you want.

Joseph
A: 

I suggest you use

(?<=")(?:\\.|[^"\\])*(?=")

This will match only what is between the quotes (not the quotes themselves) and also handle escaped quotes inside your string correctly.

So in "She said, \"Hi!\"", it will match She said, \"Hi!\".

If you're using JavaScript or Ruby (which you didn't mention) and therefore can't use lookbehind, use

"((?:\\.|[^"\\])*)"

and work with the capturing group no. 1.

Tim Pietzcker