SCALA регулярное выражение: Найти соответствующий URL rgex в предложении - PullRequest
0 голосов
/ 28 сентября 2018
        import java.util.regex._


object RegMatcher extends App {
val str="facebook.com"

  val urlpattern="(http://|https://|file://|ftp://)?(www.)?([a-zA-Z0-9]+).[a-zA-Z0-9]*.[a-z]{3}.?([a-z]+)?"
  var regex_list: Set[(String, String)] = Set()

  val url=Pattern.compile(urlpattern)
  var m=url.matcher(str)

  if (m.find()) {


    regex_list += (("date", m.group(0)))

    println("match: " + m.group(0))

  }
  val str2="url is ftp://filezilla.com"

  m=url.matcher(str2)
  if (m.find()) {

    regex_list += (("date", m.group(0)))

    println("str 2 match: " + m.group(0))

  }
  }

Возвращает

match: facebook.com
str 2 match: url is ftp:

Как мне управлять шаблоном регулярных выражений, чтобы обе строки хорошо согласовывались.Что на самом деле означают символы в регулярном выражении?Я очень новичок в регулярных выражениях.Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Регулярное выражение можно обновить до

((ftp|https|http?):\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,})

Это все, что мне нужно.

0 голосов
/ 28 сентября 2018

Я читаю ваше регулярное выражение как:

  • 0 или 1 (модификатор ?) схем (http://, https:// и т. Д.)
  • с последующим0 или 1 экземпляр www.,
  • , за которым следуют 1 или более (модификатор +) буквенно-цифровых символов,
  • , за которыми следует любой символ (. - специальный символ регулярного выражения, помните, обозначая любой один символ),
  • , за которым следуют 0 или более (модификатор *) буквенно-цифровых символов,
  • , за которыми следует любой символ (. снова)
  • , за которыми следует3 строчные буквы ({3} является модификатором точного подсчета)
  • , за которыми следуют 0 или 1 любой символ (.?)
  • , за которым следуют одна или несколько строчных букв.

Если вы подключите свое регулярное выражение к regex101.com, вы не только увидите похожую разбивку (без каких-либо ошибок, которые я мог бы сделать, хотя я думаю, что я прибил его), и вы такжеиметь возможность протестировать различные строки против него.Затем, когда ваши регулярные выражения работают так, как вы хотите, вы можете вернуть их в свой сценарий.Это надежный рабочий процесс как для изучения регулярных выражений, так и для разработки выражения для конкретной цели.

Если вы отбросите свое регулярное выражение и свои входные данные в регулярное выражение 101, вы поймете, почему вы получаете результат, который видите.Но вот подсказка: когда вы спрашиваете, чтобы ваше регулярное выражение совпадало с "url is ftp://filezilla.com", ничто не исключает "url is" из участия в совпадении.Вот почему вы не соответствуете схеме, которую вы хотите.Regex101 действительно отличный способ исследовать это дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...