Fix #61072: inconsistent fullmatch results with regex alternation
in PyArrow strings
Fixes an issue where regex patterns with alternation (|) produce different results between str dtype and string[pyarrow] dtype. When using patterns like "(as)|(as)", PyArrow implementation would incorrectly match "asdf" while Python's implementation correctly rejects it. The fix adds special handling to ensure alternation patterns are properly parenthesized when using PyArrow-backed strings

- [ ] closes #61072  
> I think this ends up using pyarrow's `match_substring_regex` function here; therefore, this would be a limitation of the pyarrow implementaiton and would need fixing there instead of pandas

Thanks for the feedback! I agree the issue stems from PyArrow’s match_substring_regex not enforcing full-string matching. To ensure consistent Series.str.fullmatch behavior, I propose a pandas workaround: wrap patterns in ^...$ for PyArrow arrays (e.g., pat = f"^{pat}$") while keeping the | grouping logic. I’ll:

Implement the workaround.
Add tests for foo|bar, empty strings, and re.IGNORECASE.
Document the PyArrow limitation in the docstring.
File a PyArrow bug report and link it here.
I’ll update the PR shortly. Please let me know if this approach works or if you suggest an alternative Thanks but I prefer not to add temporary workarounds in pandas until it's properly implemented in PyArrow. If interested in still working on this, I would suggest working on this on the Arrow repository so closing as an upstream issue