#!/bin/bash
function handle_value {
local one=$1
local two=$2
echo "i found ${one}-${two}"
}
function match_all {
local current=$1
local regex=$2
local handler=$3
while [[ ${current} =~ ${regex} ]]; do
"${handler}" "${BASH_REMATCH[@]:1}"
# trim off the portion already matched
current="${current#*${BASH_REMATCH[0]}}"
done
}
match_all \
"DO-BATCH BATCH-DO" \
'([[:alpha:]]+)-([[:alpha:]]+)' \
'handle_value'
IyEvYmluL2Jhc2gKCmZ1bmN0aW9uIGhhbmRsZV92YWx1ZSB7CiAgbG9jYWwgb25lPSQxCiAgbG9jYWwgdHdvPSQyCgogIGVjaG8gImkgZm91bmQgJHtvbmV9LSR7dHdvfSIKfQoKZnVuY3Rpb24gbWF0Y2hfYWxsIHsKICBsb2NhbCBjdXJyZW50PSQxCiAgbG9jYWwgcmVnZXg9JDIKICBsb2NhbCBoYW5kbGVyPSQzCgogIHdoaWxlIFtbICR7Y3VycmVudH0gPX4gJHtyZWdleH0gXV07IGRvCiAgICAiJHtoYW5kbGVyfSIgIiR7QkFTSF9SRU1BVENIW0BdOjF9IgoKICAgICMgdHJpbSBvZmYgdGhlIHBvcnRpb24gYWxyZWFkeSBtYXRjaGVkCiAgICBjdXJyZW50PSIke2N1cnJlbnQjKiR7QkFTSF9SRU1BVENIWzBdfX0iCiAgZG9uZQp9CgptYXRjaF9hbGwgXAogICJETy1CQVRDSCBCQVRDSC1ETyIgXAogICcoW1s6YWxwaGE6XV0rKS0oW1s6YWxwaGE6XV0rKScgXAogICdoYW5kbGVfdmFsdWUn