- 1
string pattern = @"\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?";
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+116
string pattern = @"\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?";
Регулярка для IP //_*)
tirinox 25.08.2013 09:55 # +5
bormand 25.08.2013 11:16 # +1
guest 27.08.2013 13:25 # 0
bormand 25.08.2013 11:10 # +2
Lowezar 25.08.2013 12:48 # +1
anonimb84a2f6fd141 26.08.2013 02:03 # +1
> true
у того петушка хотя бы работает
rdifb0 25.08.2013 13:45 # +1
guest 13.09.2013 00:07 # −6
[email protected] (Спросить Тараса)
myaut 25.08.2013 13:57 # +1
bormand 25.08.2013 17:04 # +1
bormand 26.08.2013 20:07 # +2
kegdan 27.08.2013 01:18 # 0
K6L7M8}|[1-3P9}|4[0-1P8}|42OB{7}|429[0-3P6}|4294OB{5}|42949[0-5P4}|429496[0-6P3}|4294967[0-1P2}|42949672OB|429496729N9}|[1-3]C{10}J(K4L5M6}|1[0-5P6}|16[0-6P5}|167[0-6P4}|1677[0-6P3}|1677[0-1P2}|1677720B|1677721N6}Q{7}J(K2L3M3}|[1-5P4}|6[0-4P3}|65[0-4P2}|655[0-2]B|6553N4}|1C{5}JH))
A = [0-9a-f]
B = [0-9]
C = [0-7]
D = [1-9a-f]
E = A|DA
F = [1-9]
G = B|FB
H =((0x(E))|(G|1B{2}|2[0-4]B|25[0-5])|(0(CQ|[1-3]C{2})))
J = )))|H\.
K = ((0x(E{1,
L =}|DA{
M = }))|(G{1,
N = [0-5])|(0(CQ{1,
O = [0-8]
P = ]B{
Q = |[1-7]C{
bormand 27.08.2013 09:04 # 0
wvxvw 27.08.2013 01:20 # +1
Lokich 27.08.2013 10:18 # 0
roman-kashitsyn 27.08.2013 10:22 # 0
wvxvw 27.08.2013 11:42 # 0
- модульное (позволяет повторно использовать части выражений в других выражениях).
- описывает больше грамматик.
- конкретно в Лиспе можно дополнительно использовать любую функцию в качестве тест / лукахед / лукбихайнд.
kegdan 27.08.2013 11:51 # +1
а классно было бы - язык программирования транслитом на русском...
деф фанкшен(листВан,листТу):
____и = 0
____вайл и<лен(листВан):
ну и тд
bormand 27.08.2013 12:01 # 0
При этом поди можно еще конвертировать строки в нужный формат на ходу, и на выхлопе parse получить готовое s-выражение, а не куски строк? :)
wvxvw 27.08.2013 12:19 # 0
roman-kashitsyn 27.08.2013 12:23 # 0
bormandinho 13.01.2020 01:32 # 0
guest 27.08.2013 11:01 # +2
bormand 27.08.2013 11:05 # +1
P.S. Надо кому-нибудь генератор реджексов для проверки целочисленных интервалов аля [42..1500]?
guest 27.08.2013 11:16 # 0
bormand 27.08.2013 11:27 # 0
Это точно ;)
http://govnokod.ru/13674
kegdan 27.08.2013 11:30 # +1
guest 13.09.2013 00:07 # −6
[email protected] (Спросить Тараса)
eth0 25.08.2013 16:45 # +1
blackhearted 26.08.2013 12:00 # −1
roman-kashitsyn 27.08.2013 08:58 # +1
bormand 27.08.2013 09:11 # 0
roman-kashitsyn 27.08.2013 09:29 # 0
... || 15 < r || !ipstr[r]
bormand 27.08.2013 09:22 # 0
roman-kashitsyn 27.08.2013 09:33 # 0
bormand 27.08.2013 09:43 # 0
roman-kashitsyn 27.08.2013 10:09 # 0
guest 27.08.2013 11:17 # 0
roman-kashitsyn 27.08.2013 12:20 # +1
bormand 27.08.2013 12:34 # +1
"256.0.0.0": unexpected "." expecting digit.
"1.1.1.1.1": unexpected end of input expecting ".".
Не в курсе, как пофиксить?
P.S. Спасибо за прием с mfilter.
roman-kashitsyn 27.08.2013 13:14 # 0
bormand 27.08.2013 14:06 # 0
ParseError содержит в себе пачку сообщений, каждое из которых может быть expected, unexpected и просто message. При конвертации в строку они объединяются в более-менее красивый вид, который мы видим в выхлопе.
<?> "some" генерит expected
unexpected "some" и satisfy f генерят unexpected
fail "some" генерит message
Зафейлившийся комбинатор <|>, как я понял, возвращает ParseError, в котором лежат все сообщения, которые вернули все его ветки. Т.е. если первая ветка ждала "x" но увидела "p", вторая ждала "y", но увидела "p", а третья вызвала fail "djihurda", то мы получим что-то в духе Внутри sepBy и many1 как раз есть тот самый <|>...
P.S. Есть идейка как выправить вывод, попробую реализовать.
roman-kashitsyn 27.08.2013 14:17 # 0
roman-kashitsyn 27.08.2013 14:23 # 0
хотя нет, это врядли поможет.
bormand 27.08.2013 16:50 # 0
Все стандартные парсеры агрегируют ошибки, а доступа к кишкам, если я не туплю, нет, т.к. все конструкторы в привате.
Остается вот такой костыль, подламывающий вывод типов (приходится явно написать, что ipv4 это GenParser [Char] st [Int]): P.S. На IdeOne парсека нет :(
P.P.S. Этот костыль, естественно, уже не выдает позицию, в которой случилась ошибка.
bormand 27.08.2013 11:03 # 0
Фулл версия (все варианты ипв4 + возврат хвоста по аналогии с strtoul): http://ideone.com/eYccnC
guest 27.08.2013 13:24 # 0
bormand 27.08.2013 13:36 # +1
И даже 0127.0xFA.0xFB03
anonimb84a2f6fd141 27.08.2013 13:47 # 0
anonimb84a2f6fd141 27.08.2013 14:12 # 0
bormand 27.08.2013 14:18 # 0
Не должна. Проверял?
anonimb84a2f6fd141 28.08.2013 02:41 # 0
Дальше ковырять не буду, ибо говнокод полностью нечитаем.
bormand 28.08.2013 06:35 # +1
> ибо говнокод полностью нечитаем.
Как и любая регулярка больше 20-30 символов...
anonimb84a2f6fd141 28.08.2013 09:17 # 0
Тут недавно пробегал свернутый регексп для проверки емейл адресов. Выглядел вполне цивильно.
bormand 28.08.2013 09:29 # +2
Lure Of Chaos 28.08.2013 00:28 # 0
anonimb84a2f6fd141 28.08.2013 02:41 # +1