- 1
- 2
- 3
- 4
- 5
private static final String IPADDRESS_PATTERN =
"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+134
private static final String IPADDRESS_PATTERN =
"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
Сначала статья по регуляркам, а потом хороший, годный пример для ip)
+126
import Data.Char
import Data.List
digitRangeToRegex :: Integer -> Integer -> String
digitRangeToRegex min max
| min == max = digit min : ""
-- uncomment if you want \d instead of [0-9]
-- | min == 0 && max == 9 = "\\d"
| min >= 10 || max <= 9 = "[" ++ rangeToStr (digit min) (digit max) ++ "]"
| otherwise = "[" ++ rangeToStr (digit min) '9' ++ rangeToStr 'a' (digit max) ++ "]"
where
rangeToStr min max
| min == max = min : ""
| otherwise = min : '-' : max : ""
digit d
| d >= 0 && d <= 9 = chr (ord '0' + fromIntegral d)
| d < 36 = chr (ord 'a' + fromIntegral d - 10)
numberRangeToRegex :: Integer -> Integer -> Integer -> String
numberRangeToRegex base min max
| min == 0 && max == 0 = "0"
| cmin == cmax = intercalate "|" $ map formatRanges $ step dmin dmax
| otherwise = intercalate "|" $
(map formatRanges $ step dmin (replicate cmin (base-1))) ++
(if cmin + 1 < cmax then [digitRangeToRegex 1 (base - 1) ++ digitRangeToRegex 0 (base-1) ++ formatCount cmin (cmax-2)] else []) ++
(map formatRanges $ step (1 : replicate (cmax-1) 0) dmax)
where
digits 0 = [0]
digits n = reverse $ map (`mod` base) $ takeWhile (>0) $ iterate (`div` base) n
dmin = digits min
dmax = digits max
cmin = length dmin
cmax = length dmax
step [] [] = [[]]
step (a:as) (b:bs) =
if a == b then
prepend a $ step as bs
else
(if zeroHead then [] else prepend a $ step as nines) ++
(if na > nb then [] else [(na, nb) : replicate (length as) (0, base-1)]) ++
(if nineTail then [] else prepend b $ step zeros bs)
where
suffixLen = length as
zeroHead = all (== 0) as
nineTail = all (== base-1) bs
na = if zeroHead then a else a+1
nb = if nineTail then b else b-1
zeros = replicate suffixLen 0
nines = replicate suffixLen (base-1)
prepend x = map ((x, x):)
formatRanges = concatMap formatGroup . group . dropWhile (== (0,0)) where
formatGroup [(min, max)] = digitRangeToRegex min max
formatGroup xs@((min, max) : _)
| min == max = concat $ replicate (length xs) $ digitRangeToRegex min max
| otherwise = digitRangeToRegex min max ++ "{" ++ show (length xs) ++ "}"
formatCount min max
| min == 1 && max == 1 = ""
| min == max = "{" ++ show min ++ "}"
| otherwise = "{" ++ show min ++ "," ++ show max ++ "}"
Генератор реджексов, проверяющих диапазон чисел. Говнецо то еще, причем не только в реализации и выхлопе, но и в самой идее :)
Пример: http://ideone.com/FzAmYd
+116
string pattern = @"\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?";
Регулярка для IP //_*)
+139
Всего обработано 12582 постов (не считая 1055 исключённых из-за 404 ошибки), 186254 комментариев, которые создали 4163 пользователей.
3390+ юзеров имеют 1+ постов
181+ юзеров имеют 10+ постов
6+ юзеров имеют 100+ постов
1+ юзеров имеют 1000+ постов
3159+ юзеров имеют 1+ комментариев
875+ юзеров имеют 10+ комментариев
178+ юзеров имеют 100+ комментариев
24+ юзеров имеют 1000+ комментариев
2+ юзеров имеют 10000+ комментариев
711+ юзеров создали 1+ комм./постов за последние 360 дней
299+ юзеров создали 5+ комм./постов за последние 360 дней
197+ юзеров создали 10+ комм./постов за последние 360 дней
77+ юзеров создали 50+ комм./постов за последние 360 дней
49+ юзеров создали 100+ комм./постов за последние 360 дней
17+ юзеров создали 500+ комм./постов за последние 360 дней
290+ юзеров создали 1+ комм./постов за последние 90 дней
118+ юзеров создали 5+ комм./постов за последние 90 дней
86+ юзеров создали 10+ комм./постов за последние 90 дней
37+ юзеров создали 50+ комм./постов за последние 90 дней
25+ юзеров создали 100+ комм./постов за последние 90 дней
144+ юзеров создали 1+ комм./постов за последние 30 дней
59+ юзеров создали 5+ комм./постов за последние 30 дней
40+ юзеров создали 10+ комм./постов за последние 30 дней
23+ юзеров создали 20+ комм./постов за последние 30 дней
14+ юзеров создали 50+ комм./постов за последние 30 дней
9+ юзеров создали 100+ комм./постов за последние 30 дней
Топ 20 пользователей, которые вызывают эмоции
(по количеству кликов по +/-):
1: guest (#1) - 224256 (1418 постов, 32235 комментариев)
2: Lure Of Chaos (#1538) - 28637 (133 постов, 14460 комментариев)
3: bormand (#5528) - 17334 (62 постов, 8303 комментариев)
4: TarasB (#721) - 15999 (60 постов, 5978 комментариев)
5: roman-kashitsyn (#3818) - 12252 (71 постов, 5767 комментариев)
6: 3.14159265 (#1438) - 11991 (85 постов, 4851 комментариев)
7: bugmenot (#1632) - 11748 (51 постов, 6120 комментариев)
8: anonimb84a2f6fd141 (#5798) - 10073 (52 постов, 1806 комментариев)
9: absolut (#1528) - 7881 (21 постов, 4142 комментариев)
10: defecate-plusplus (#4442) - 6788 (13 постов, 2748 комментариев)
11: LispGovno (#6011) - 5951 (88 постов, 2733 комментариев)
12: Анонимус (#1679) - 5783 (8 постов, 3021 комментариев)
13: eth0 (#2108) - 5401 (0 постов, 2608 комментариев)
14: inkanus-gray (#1659) - 5307 (16 постов, 2538 комментариев)
15: Stertor (#5934) - 4395 (98 постов, 864 комментариев)
16: Говногость (#320) - 3893 (184 постов, 937 комментариев)
17: istem (#1997) - 3851 (31 постов, 2130 комментариев)
18: wvxvw (#988) - 3446 (115 постов, 2446 комментариев)
19: xXx_totalwar (#963) - 3427 (24 постов, 1099 комментариев)
20: Vasiliy (#1478) - 3404 (56 постов, 1573 комментариев)
Статистика ГК. Данные были собраны за последние 3-4 дня.
Постараюсь добавить в комментарии несколько Топ50.
+125
int prev, next;
// next should not be equal to prev;
next = radnom(MAX);
if (next = prev)
next = random(MAX);
Просто передаю концепцию на общеславянском.
Будет интересно посчитать насколько всё-таки это говно уменьшает вероятность совпадения при разных MAX.
+141
(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
\t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
\t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)
+124
<!-- Вот люблю я HTML. Смотри, есть 2 страницы, которые лепятся скриптом в одну. Нам нужно скрыть часть второй на первой. -->
<!-- Как поступит нормальный вебмастер? Правильно, напишет скрипт, и доработает движок, чтоб не шёл инклюд в нужных местах. -->
<!-- Как поступлю я? Я добавлю лишний тег закрытия коммента в эту самую вторую страницу, а в нужном месте открою коммент, чтоб -->
<!-- он закрыл эту часть. Учись. Ох, и понаписал... -->
<!--
</table>
<table width="630" border="1" class="main">
<tr><td>
<form name="form">
<select name="site" size="1" class="menu_opt">
<option class="blu" value="">Навигация по сайту
<option class="red" value="index.html">Главная
....
</select>
<input type=button value="Go!" onClick="javascript:formHandler(this)">
</form>
</td></tr>
</table>
<!-- 1 -->
Как скрыть менюху внизу? Да очень просто, хоть и не валидно. Такой ужас удалось найти в одном из обслуживаемых порталов.
+138
Шаблон
(\$*(\d*(\.+\d+)?){1})
Шаблон замены
**$&
Вход
$1.30
Выход
**$1.30**
А теперь вопрос знатокам: Каким жестоким человеком нужно быть, что бы засунуть в пример регулярку, которая может соответствовать 0(?!) символов?
Все та же статья MSDN
http://msdn.microsoft.com/ru-ru/library/az24scfc.aspx
+117
\d+[\+-x\*]\d+\d+[\+-x\*\d+
Даже не говнокод, а фиг знает что. Решил сегодня поизучить регеспы, почитал пару мануалов, зашел на MSDN
http://msdn.microsoft.com/ru-ru/library/az24scfc.aspx
А там этот пример. И указано что он находит "2+2" и "3*9" в "(2+2) * 3*9"
Я подозреваю, что они хотели написать @"\d+[+-\\*]\d+". Печально, когда человек, день знакомый с регулярками, находит в их примерах ошибки(
+125
<Target Name="AfterBuild">
<PropertyGroup>
<base>$(ProjectDir.Replace('\', '/'))</base>
</PropertyGroup>
<Exec Command="$(bash) -c 'cd $(base)doc ; thor md:generate $(base)doc/doc.md'" />
Генерация документации по феншую.