Robert Owen
Robert Owen

Reputation: 930

Regex help - match to number or end of string

Struggling to work this one out as I'm not great with regex. I have strings like this:

Method
Lorem ipsum dolor sit amet, id pro lorem consulatu, ut nemore principes vel. Nibh aliquam iracundia ea est, probo utamur placerat at duo. Nam an perfecto voluptaria temporibus, no dicat dolores eum. Doming dissentias eloquentiam sit id, sit eu etiam scriptorem appellantur, ne explicari voluptaria nec.

Agam erroribus cum id, vis ei nominavi copiosae. Per unum atomorum ut, amet atqui moderatius in mel, ex mucius concludaturque vix. Ei quodsi admodum conclusionemque duo, pro vidit nonumy fastidii at. Aliquip voluptua appetere eam id.
42
Aliquip voluptua appetere

Which I can detect fine with the following regex: /^Method\n(.*[\s\S]*)(?:\d\d)/

https://regex101.com/r/Uw3XzK/1

The problem comes in occassionally the string I am detecting does not end in a number. Here I generally just need to go to the end of the string.

Method
Lorem ipsum dolor sit amet, id pro lorem consulatu, ut nemore principes vel. Nibh aliquam iracundia ea est, probo utamur placerat at duo. Nam an perfecto voluptaria temporibus, no dicat dolores eum. Doming dissentias eloquentiam sit id, sit eu etiam scriptorem appellantur, ne explicari voluptaria nec.

Agam erroribus cum id, vis ei nominavi copiosae. Per unum atomorum ut, amet atqui moderatius in mel, ex mucius concludaturque vix. Ei quodsi admodum conclusionemque duo, pro vidit nonumy fastidii at. Aliquip voluptua appetere eam id.

I have tried adding a ? to the stirng. /^Method\n(.[\s\S])(?:\d\d)? however this then breaks the matching of the first string.

What can I do to first and foremost match string 1, but then fall back to matching to the end of the file?

Upvotes: 1

Views: 52

Answers (1)

Tim Biegeleisen
Tim Biegeleisen

Reputation: 520918

The following pattern in fact works with PHP, when using preg_match_all in dot all mode:

\bMethod.*?(?=\d{2}|$)

Sample script:

$input = "Method\nLorem ipsum dolor sit amet, id pro lorem consulatu, ut nemore principes vel. Nibh aliquam iracundia ea est, probo utamur placerat at duo. Nam an perfecto voluptaria temporibus, no dicat dolores eum. Doming dissentias eloquentiam sit id, sit eu etiam scriptorem appellantur, ne explicari voluptaria nec.\nAgam erroribus cum id, vis ei nominavi copiosae. Per unum atomorum ut, amet atqui moderatius in mel, ex mucius concludaturque vix. Ei quodsi admodum conclusionemque duo, pro vidit nonumy fastidii at. Aliquip voluptua appetere eam id.\n42\nAliquip voluptua appetere";
preg_match_all("/\bMethod.*?(?=\d{2}|$)/s", $input, $matches);
print_r($matches);

Upvotes: 1

Related Questions