I am trying to split the expression like in Postgres 9.4: "some text 123_good_345 and other text 123_some_invalid and 222_work ok_333 stop."
using pattern: (\d+\_.*\_\d+\D)+?
result is:
"123_good_345"
"123_some_invalid and 222_work ok_333"
But I need
"123_good_345"
"222_work ok_333"
note, ignoring "123_some_invalid"
Please help!

222_workandok_333are part of same match group?\d+_(?:(?!\d_).)*_\d+. See regex101.com/r/iq45qc/1 and rextester.com/VJJXF1223. See full answer below.