Here are the data I receive :
I want to get only the message of the question. It is possible that my question is on several lines. For that I put "/s" at the end of my regex.
My regex is : /question : ((.|)*)\n?(line_1|line_2)/s
Example 1:
question : this is my question
line_1: 0
line_2: 1
Example 2 :
question : this is my question
line_2: 1
For my example 2 it's ok it works but for example 1 the condition "or" does not stop at the first occurrence found, do you have a solution ? Thanks for your help
CodePudding user response:
You can use
question\s*:\s*(\S.*(?:\r?\n. )*)
See the regex demo. Note I added \r? because the . in JavaScript does not match carriage returns.
If line_1 and line_2 are line_ digits and must be present, then include them as
question\s*:\s*(\S.*(?:\r?\nline_\d.*)*)
See this regex demo.
Details:
question- a word\s*:\s*- a colon enclosed with zero or more whitespaces(\S.*(?:\r?\nline_\d.*)*)- Group 1:\S- a non-whitespace char.*- the rest of the line(?:\r?\nline_\d.*)*- zero or more lines that start withline_and a digit and then the rest of the line can have any chars.(?:\r?\n. )*matches any zero or more non-empty (zero-length) lines.
CodePudding user response:
Thanks for the answer and sorry I didn't explain it well.
My line_1 and line_2 are 2 different words and I would like them to be excluded from my group 1. Another condition the message can be on several lines.
I put you a better example :
question: **This message can be on several lines.
Continuation of the message
end of the message**
currency_mortgage : 0
property_alert: 1
Sometimes the "currency_mortgage" is not there, so we have :
question: **This message can be on several lines.
Continuation of the message
end of the message**
property_alert: 1
I don't know how to stop the capture of group 1 before either "property_alert" or "currency_mortgage" to really take only the message content.
