В XPath 2.0 есть некоторые функции, которые поддерживают регулярные выражения: matches(), replace(), tokenize().
В XPath 1.0 нет поддержки регулярных выражений.
Для .NET вы можете использовать движок XPath в Saxon.Net для поддержки XPath 2.0.
Итак, если вы используете движок XPath 2.0 в Saxon.NET, ваш пример будет выглядеть так: .//div[matches(@id,'foo\d+')].
Ответ 3
В .NET у вас есть возможность доступа к вашим пользовательским классам (и, следовательно, регулярному выражению, если вы можете правильно его кодировать для своих нужд) через Extension Objects.