- 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 //_*)
> true
у того петушка хотя бы работает
[email protected] (Спросить Тараса)
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{
- модульное (позволяет повторно использовать части выражений в других выражениях).
- описывает больше грамматик.
- конкретно в Лиспе можно дополнительно использовать любую функцию в качестве тест / лукахед / лукбихайнд.
а классно было бы - язык программирования транслитом на русском...
деф фанкшен(листВан,листТу):
____и = 0
____вайл и<лен(листВан):
ну и тд
При этом поди можно еще конвертировать строки в нужный формат на ходу, и на выхлопе parse получить готовое s-выражение, а не куски строк? :)
P.S. Надо кому-нибудь генератор реджексов для проверки целочисленных интервалов аля [42..1500]?
Это точно ;)
http://govnokod.ru/13674
[email protected] (Спросить Тараса)
... || 15 < r || !ipstr[r]
"256.0.0.0": unexpected "." expecting digit.
"1.1.1.1.1": unexpected end of input expecting ".".
Не в курсе, как пофиксить?
P.S. Спасибо за прием с mfilter.
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. Есть идейка как выправить вывод, попробую реализовать.
хотя нет, это врядли поможет.
Все стандартные парсеры агрегируют ошибки, а доступа к кишкам, если я не туплю, нет, т.к. все конструкторы в привате.
Остается вот такой костыль, подламывающий вывод типов (приходится явно написать, что ipv4 это GenParser [Char] st [Int]): P.S. На IdeOne парсека нет :(
P.P.S. Этот костыль, естественно, уже не выдает позицию, в которой случилась ошибка.
Фулл версия (все варианты ипв4 + возврат хвоста по аналогии с strtoul): http://ideone.com/eYccnC
И даже 0127.0xFA.0xFB03
Не должна. Проверял?
Дальше ковырять не буду, ибо говнокод полностью нечитаем.
> ибо говнокод полностью нечитаем.
Как и любая регулярка больше 20-30 символов...
Тут недавно пробегал свернутый регексп для проверки емейл адресов. Выглядел вполне цивильно.