Эффективность регулярного выражения, которое извлекает учетные данные БД из строки URL базы данных. - PullRequest
0 голосов
/ 03 апреля 2020

Допустим, у меня есть строка URL БД, которая выглядит следующим образом:

"mysql2://foo:bar@baz.com/fizz?reconnect=true"

, и я придумал регулярное выражение для извлечения имени пользователя, пароля и имени хоста:

/\w:\/\/(\w+):/ # extracts username ("foo")
/\w:\/\/\w+:(\w+)/ # extracts password ("bar")
/\w:\/\/\w+:\w+@([\w+-\/]+)/ # extracts host name ("baz.com")

Как это регулярное выражение можно улучшить / сделать более эффективным?

1 Ответ

3 голосов
/ 03 апреля 2020

Вот регулярное выражение, объединяющее ваши 3 в одно регулярное выражение с 3 различными группами захвата:

\w:\/{2}(\w+):(\w+)@(\w+\.\w+)

Они кажутся довольно простыми и быстрыми регулярными выражениями, но вот хороший инструмент для проверки ваших регулярных выражений: https://regex101.com/. Он показывает, сколько шагов нужно выполнить, основываясь на ваших примерах и группах захвата. Для меня это один из первых инструментов, которые я использую при работе с новым регулярным выражением, которое не простое.

Что касается улучшения регулярных выражений, вы хотите попробовать и заставить движок выполнять как можно меньше шагов. Таким образом, быстрое сопоставление и быстрый сбой в регулярном выражении помогут. Например, если это всегда mysql2, вы можете вместо этого запустить регулярное выражение с 2:\/{2}, и это сокращает 10 шагов на основе регулярного выражения, которое у меня есть выше.

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