(?:(^\+\d{2})?)(?:([1-9]{2})|([0-9]{3})?)(\d{4,5})(\d{4})
-
(?:(^\+\d{2})?)
- Busca por um + seguido por dois números, opcional.
-
(?:([1-9]{2})|([0-9]{3})?)
-
Busca por dois números de 1 à 9, ou três números de 0 à 9, isso faz a diferença entre o DDD com zero e DDD sem zero, lembrando que nenhum código de cidade tem o digito 0. Também opcional.