Попробуйте
((?:https?:\/\/)?(?:www\.)?facebook\.com\/[\w.]*)(?=[^w.])(?!.*\1)
Это ваше регулярное выражение (несколько упрощенное) с добавлением отрицательного взгляда вперед, чтобы удостовериться, что URL не повторяется далее в тексте.Это означает, что в списке сохраняется только последнее совпадение .
((?:https?:\/\/)?(?:www\.)?facebook\.com\/[\w.]*)
Смотрите здесь,
Это объяснитэто для вас графически. .
Объяснение lite:
(:?
... )
делает не захваченную группу.?
делает предшествующий ему символ или группу необязательными.(?=[^w.])
- положительный взгляд в будущее - убедиться, что весь URL совпадает (за ним следует что-то, а НЕ символ слова или точка).(?!.*\1)
- это негативный взгляд на будущее, поэтому группа захвата (часть URL, захваченная между ()
), которой предшествует что-либо (.*
), не повторяется.