Я читаю ваше регулярное выражение как:
- 0 или 1 (модификатор
?
) схем (http://
, https://
и т. Д.) - с последующим0 или 1 экземпляр
www.
, - , за которым следуют 1 или более (модификатор
+
) буквенно-цифровых символов, - , за которыми следует любой символ (
.
- специальный символ регулярного выражения, помните, обозначая любой один символ), - , за которым следуют 0 или более (модификатор
*
) буквенно-цифровых символов, - , за которыми следует любой символ (
.
снова) - , за которыми следует3 строчные буквы (
{3}
является модификатором точного подсчета) - , за которыми следуют 0 или 1 любой символ (
.?
) - , за которым следуют одна или несколько строчных букв.
Если вы подключите свое регулярное выражение к regex101.com, вы не только увидите похожую разбивку (без каких-либо ошибок, которые я мог бы сделать, хотя я думаю, что я прибил его), и вы такжеиметь возможность протестировать различные строки против него.Затем, когда ваши регулярные выражения работают так, как вы хотите, вы можете вернуть их в свой сценарий.Это надежный рабочий процесс как для изучения регулярных выражений, так и для разработки выражения для конкретной цели.
Если вы отбросите свое регулярное выражение и свои входные данные в регулярное выражение 101, вы поймете, почему вы получаете результат, который видите.Но вот подсказка: когда вы спрашиваете, чтобы ваше регулярное выражение совпадало с "url is ftp://filezilla.com"
, ничто не исключает "url is"
из участия в совпадении.Вот почему вы не соответствуете схеме, которую вы хотите.Regex101 действительно отличный способ исследовать это дальше.