В вашем регулярном выражении вы используете символ ^, это указывает на начало строки, поэтому "c = (\ d +) ^" никогда не сделает совпадение, если оно не пытается сопоставить что-то, что находится перед началом строки?
Насколько я знаю, регулярное выражение не может вести себя так, как вы хотите (как в одной строке, возвращающей два значения, последнее перед первым), это довольно легко сделать с двумя отдельными выражениями, а затем просто используйте последний (C) перед первым (a) как в псевдокоде
match_for_a = "a=(\d+)"
match_for_c = "C=(\d+)"
do_something( match_for_c)
do_something( match_for_a)
У вас уже есть (почти почти) соответствующее регулярное выражение для каждого
a=(\d+)
и
C=(\d+)
EDIT:
на основе вашего комментария и моего ответа приведем псевдокод для функции, возвращающей кортеж.
tuple match_c_and_a(){
match_for_a = regex_match("a=(\d+)")
match_for_c = regex_match("C=(\d+)")
return (match_for_c, match_for_a)
}
Но такие вещи не являются регулярным выражением и зависят от языка программирования.
ИЗМЕНИТЬ СНОВА
Извините, если я скучаю, понимаю вас, фарка, но ни в одном из представленных ответов я не вижу ничего, что мешало бы вам делать то, что вы хотите.
Разве вы не можете просто сделать
for every item in the database
get the match for C
do something with it
get the match for a
do something with it
Regex может совпадать в любом месте строки, поэтому не имеет значения, в каком порядке вы получаете элементы C и a in.