В классах символов регулярного выражения ICU & означает пересечение. Например, @ "[[: letter:] & [a-z]]". Таким образом, это должно быть процитировано как предложение Питера, с обратной косой чертой, то есть \ & в регулярном выражении. Однако \ имеет особое значение в строках C, включая строки Objective C. Таким образом, \ должен сам по себе быть указан с. Так что вам нужно \ & в вашем шаблоне. Т.е. [-a-zA-Z0-9 + \ & @ # /%? = ~ _ () |!:,.;]
Кроме того, я не уверен, что вы собираетесь сделать с ^ в начале URL. Если вы хотите, чтобы регулярное выражение совпадало где-либо в строке, вместо этого вы должны использовать \ b (перерыв слова). Если вы хотите, чтобы он совпадал с URL-адресами, которые находятся только в начале сообщения, вы получите только одно совпадение, как написано. Если вы хотите, чтобы он совпадал с URL-адресами в начале строки, добавьте (? M) в начале регулярного выражения, чтобы включить многострочное сопоставление для ^ (и рассмотрите возможность добавления $ в конец регулярного выражения).