Regex only capture first match
I've been googling and looking through recommended question offered by stack overflow. However, I failed to find the answers.
I want to parse a string using regex, example of the string is
Lot: He said: Thou shalt not pass!
I want to capture Lot as a group, and He said: Thou shalt not pass!. However, when I used my (.+): (.+) pattern, it returns
Lot: He said: and Thou shalt not pass!
Is it possible to capture He said: Thou shalt not pass using regex?
Answers
You need a non-greedy (or lazy) cardinality for the first group: (.+?): (.+).
More details on http://www.regular-expressions.info/repeat.html, chapter "Laziness Instead of Greediness".
give this a try:
([^:]+):\s*(.*)
(?=.*?:.*?:)(.*?):(.*)
You can use this.
See demo.
http://regex101.com/r/rX0dM7/9
The following one works.
([^:]+): (.+)
You should use the flags ig - i = case insensitive, g = don't return after first match and a expression like "(.:) ?(.: .*)".
You can see example here https://regex101.com/r/SXjg1b/1