I would expect “specifies the position in the string to begin the search” would mean staring from position 6 in “hello world” should be equivalent to staring with position 0 in a string “world” and thus ^ or \A should match in this case too.
Consider another example. If I use the same with StringScanner#scan it works as I would expect:
I [...] expect [...] staring from position 6 in “hello world” [to] be equivalent to staring with position 0 in [the sub-]string “world”
I do not think so. Moving "the position in the string to begin the search" does not mean the string will be truncated. It only moves the cursor position in the same string. It does not create a new string or a new edge of a string.
On the other hand, I find the behavior of StringScanner#scan to be potentially confusing, but I think I can understand why it is designed so. To my understanding, as you read from a StringScanner instance, the matched part is consumed, the original content is truncated, and indeed new edges are created as you read from it. And the same thing seems to be happening when the position is moved. (Saying somewhat metaphorically. I do not know about the actual implementation.)
Thus, I think String and StringScanner differ in nature. And particularly, String#match is not destructive whereas StringScanner#scan, StringScanner#pos= are destructive.