I do not understand the neo4j query language. At first everything you can do with regexp is described in the documentation. From what I understand of your question, you would need “name”, “second name” and “middle name” in distinct predicates and do something like as below. There is no regexp offset. So you need a predicate for each.
{
directors(func: regexp(second.name@en, /^Spielberg.*$/))
@filter(regexp(name@en, /^Steven*$/) and regexp(middle.name@en, /^some*$/)) {
name@en
}
}