На этом регулярном выражении не должно происходить катастрофического возврата

Может кто-нибудь объяснить, почему движок Java в этом регулярном выражении переходит в катастрофический режим возврата? Каждое чередование является взаимоисключающим с любым другим чередованием, насколько я могу судить.

^(?:[^'\"\\s~:/@#\\|\\^\\&\\[\\]\\(\\)\\\\\\{\\}][^\"\\s~:/@#\\|\\^\\&\\[\\]\\(\\)\\\\\\{\\}]*|
\"(?:[^\"]+|\"\")+\"|
'(?:[^']+|'')+')

Текст:'pão de açúcar itaucard mastercard platinum SUSTENTABILIDADE])

Добавление собственнического сопоставления к некоторым из чередований устраняет проблему, но я понятия не имею, почему - библиотека regex в Java должна быть чрезвычайно глючной, чтобы вернуться к взаимоисключающим ветвям.

 ^(?:[^'\"\\s~:/@#\\|\\^\\&\\[\\]\\(\\)\\\\\\{\\}][^\"\\s~:/@#\\|\\^\\&\\[\\]\\(\\)\\\\\\{\\}]*|
 \"(?:[^\"]++|\"\")++\"|
 '(?:[^']++|'')++')

Ответы на вопрос(3)

Ваш ответ на вопрос