Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
899
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
952
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
942
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1727
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6087
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4400
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Назначение {1} в этом регулярном выражении для сопоставления протоколов url
Я читал этот вопрос о том, как разобрать URLs из веб-страниц и имел вопрос о принятом ответе , который предлагал это решение:
((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)
Решение было предложено csmba , и он приписал его regexlib.com . Вот так так. Кредиты сделаны.
Я думаю, что это довольно наивное регулярное выражение, но это прекрасная отправная точка для создания чего-то лучшего. Но, мой вопрос заключается в следующем:
В чем смысл {1} ? Это означает "точно одна из предыдущих группировок", верно? Разве это не поведение по умолчанию группировки в регулярном выражении? Будет ли выражение изменено каким-либо образом, если {1} будет удален?
Если бы я увидел это от коллеги, я бы указал на его ошибку, но когда я пишу это, ответ оценивается в 6, а выражение на regexlib.com оценивается как 4 из 5. Так, может быть, я что-то упустил?
@ Роб: я не согласен. Чтобы обеспечить выполнение того, что вы просите, я думаю, вам нужно будет использовать negative-look-behind, что возможно, но, безусловно, не связано с использованием {1}. Ни одна из версий регулярного выражения не решает эту конкретную проблему.
Чтобы позволить коду говорить:
tibook 0 /home/jj33/swap > cat text
Text this is http://example.com text this is
Text this is http://http://example.com text this is
tibook 0 /home/jj33/swap > cat p
#!/usr/bin/perl
my $re1 = '((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)';
my $re2 = '((mailto\:|(news|(ht|f)tp(s?))\://)\S+)';
while (<>) {
print "Evaluating: $_";
print "re1 saw \$1 = $1\n" if (/$re1/);
print "re2 saw \$1 = $1\n" if (/$re2/);
}
tibook 0 /home/jj33/swap > cat text | perl p
Evaluating: Text this is http://example.com text this is
re1 saw $1 = http://example.com
re2 saw $1 = http://example.com
Evaluating: Text this is http://http://example.com text this is
re1 saw $1 = http://http://example.com
re2 saw $1 = http://http://example.com
tibook 0 /home/jj33/swap >
Итак, если есть разница между двумя версиями, это не похоже на то, что вы предлагаете.
Я не думаю, что {1} имеет какую-либо действительную функцию в этом regex.
(**mailto: / (новости / (ht|f) tp (s?))://) {1}**
Вы должны прочитать это как: "capture the stuff in the parens exactly one time". Но мы действительно не заботимся о захвате этого для использования позже, например $1 в замене. Так что это бессмысленно.
@Jeff Этвуд, ваша интерпретация немного не соответствует - {1} означает совпадение ровно один раз, но не влияет на "capturing" - захват происходит из - за Паренсов - фигурные скобки указывают только количество раз, когда шаблон должен соответствовать источнику-один раз, как вы говорите.
Я согласен с @Marius,, даже если его ответ немного лаконичен и может показаться легкомысленным. Регулярные выражения жестки, если вы не привыкли их использовать, и {1} в вопросе не совсем ошибка-в системах, которые его поддерживают, это означает "exactly one match". В этом смысле он действительно ничего не делает.
К сожалению, в отличие от теперь удаленной записи, это не мешает регулярному выражению соответствовать http://http://example.org, так как \S+ в конце будет соответствовать одному или нескольким символам, отличным от whitespace, включая http://example.org в http://http://example.org (проверено с помощью Python 2.5, на всякий случай, если мое чтение регулярного выражения было отключено). Итак, приведенное регулярное выражение на самом деле не самое лучшее. Я не эксперт URL, но, вероятно, что-то, ограничивающее появление ":"s и "//"S после первого, было бы необходимо (но вряд ли достаточно) для обеспечения хорошего URLs.