php - Getting text between quotes using regular expression -
i'm having issues regular expression i'm creating.
i need regex match against following examples , sub match on first quoted string:
input strings
("lorem ipsum dolor sit amet, consectetur adipiscing elit.")
('lorem ipsum dolor sit amet, consectetur adipiscing elit. ')
('lorem ipsum dolor sit amet, consectetur adipiscing elit. ', 'arg1', "arg2")
must sub match
lorem ipsum dolor sit amet, consectetur adipiscing elit.
regex far:
\((["'])([^"']+)\1,?.*\)
the regex sub match on text between first set of quotes , returns sub match displayed above.
this working perfectly, problem have if quoted string contains quotes in text sub match stops @ first instance, see below:
failing input strings
("lorem ipsum dolor \"sit\" amet, consectetur adipiscing elit.")
only sub matches: lorem ipsum dolor
("lorem ipsum dolor 'sit' amet, consectetur adipiscing elit.")
the entire match fails.
notes
the input strings php code function calls. i'm writing script scan .php source files specific function , grab text first parameter.
try regular expression:
\(\s*(?:"(?:[^"\\]+|\\.)*"|'(?:[^'\\]+|\\.)*')(?:\s*,\s*(?:"(?:[^"\\]+|\\.)*"|'(?:[^'\\]+|\\.)*'))*\s*\)
some explanation:
\(\s\*
matches opening parenthesis , optional whitespace.(?:"(?:[^"\\]+|\\.)*"|'(?:[^'\\]+|\\.)*')
match quoted string allowing quote character when escaped\
.(?:\s*,\s*(?:"(?:[^"\\]+|\\.)*"|'(?:[^'\\]+|\\.)*'))*
describes 0 or more quotes strings, preceded,
may preceded , followed whitespace.\s*\)
matches closing parenthesis optional whitespace.
Comments
Post a Comment