Reputation: 121
Is it possible to match text outside quotation marks by using standard regex parser? I have seen this answer, but it is done by using PCRE:
Can regex match all the words outside quotation marks?
This is not a pure solution because of using PERL. I know that it also can be solved by using programming language, but the idea is to use pure regex parser.
I have made something like this, but this is not working correctly
[^'"]*(?=(?:(['"])+(.*?\1))|([^'"]*$))
Thank you in advance.
UPD1:The idea is to match any kind of text outside quotation marks, the solution must not depend on the input.
Upvotes: 8
Views: 7944
Reputation: 121
I came up with this solution:
(?:[^"](?=(?:[^"]*?(?:["][^"]*?["][^"]*?)+$)|(?:[^"]*?$)))*|(^[^"]*["][^"]*$)
http://regex101.com/r/pI8xA4/2
it will not work very well if we have an odd number of quotes - In this case, it will skip the first quote. But it is the best solution for me for now.
Upvotes: 4
Reputation: 7948
This pattern will capture words outside double quotes
"[^"]+"|(\S+)
or this pattern to capture sentences outside double quotes, you would have to trim extra spaces
"[^"]+"|([^"]+)
Upvotes: 3
Reputation: 67988
<yourtext>(?=(?:[^"]*"[^"]*")*[^"]*$)
Yes you can do it in using positive lookahead.But this assumes you have balanced "
and there is no stray "
lying somewhere.See demo.
http://regex101.com/r/sU3fA2/29
Upvotes: 11