Имя: Пароль:
IT
 
Задача. Регулярное выражение для идентификатора
0 Ненавижу 1С
 
гуру
20.01.11
12:24
Придумать регулярное выражение для идентфикатора.
Правила:
1. Начинается с буквы (русского, латинского и проч. алфавитов) или символа "_"
2. Далее могут идти символы из пункта 1 или цифры
1 Ursus maritimus
 
20.01.11
12:26
Массив не канает по религиозным убеждениям? Или о чем речь?
2 Ненавижу 1С
 
гуру
20.01.11
12:28
(1) при чем тут массив? на входе строка допустим, надо подобрать шаблон регулярного выражения вытаскивающий идентификаторы
3 Ursus maritimus
 
20.01.11
12:30
;*=
4 Ursus maritimus
 
20.01.11
12:30
Ну и перевод строки обработать
5 Ненавижу 1С
 
гуру
20.01.11
12:33
(4) перевода строки допустим вообще нет
(3) что это?
6 Живой Ископаемый
 
20.01.11
12:40
Это чего, такой изощренный способ знают ли 1Сники регулярки или просто понтуются? :)
7 Ненавижу 1С
 
гуру
20.01.11
12:42
(6) мне самому нужно на самом деле ))
8 Кирпич
 
20.01.11
12:43
Что за понты?

яндекс говорит чота типа

[a-z][a-z0-9]*

нужное добавить
9 Ненавижу 1С
 
гуру
20.01.11
12:44
(8) русские буквы не канают
10 Живой Ископаемый
 
20.01.11
12:46
[a-z,а-я][a-z,а-я,0-9]*
?
11 Кирпич
 
20.01.11
12:48
вот нашел у себя. когда то накарябал компилятор с языка 1с (понтуюсь)
у меня так было

identifier      : /[a-zA-Zа-яА-ЯЁё_][a-zA-Zа-яА-ЯЁё_0-9]*/
12 Ненавижу 1С
 
гуру
20.01.11
12:53
ага, а потом добавим еще украинскую i (которая с двумя точками) не забудем про армянский и грузинский алфавиты, ну и про бурятский тоже (наверняка у них есть уникальная закорючка)

я про то, что вот в шарпе метод char IsLetter() корректно это всё выводит, а вот как рег. выражением сделать?
13 Кирпич
 
20.01.11
12:55
(12) Ну тебе ж нарисовали уже регвыражения
14 Живой Ископаемый
 
20.01.11
13:00
2(12) э... в 1Совском коде нельзя использовать идентификаторы с Украинской i... Вроде...
15 Ненавижу 1С
 
гуру
20.01.11
13:00
(13) где? для произвольного алфавита из юникод?
16 Ненавижу 1С
 
гуру
20.01.11
13:01
(14) а причем тут 1С?
17 sergeante
 
20.01.11
13:01
(12) а тебе юникод нужен? Скорее всего у IsLetter() более продвинутый алгорит с учётом юникода. В регулярках увы и ах.
18 Andry888
 
20.01.11
13:02
Это в 1С нужно сделать?
19 Кирпич
 
20.01.11
13:02
любая буква вроде w обозначается
20 Ненавижу 1С
 
гуру
20.01.11
13:04
(19) точнее любая буква и цифра и даже _
так что под первый символ не катит
21 sergeante
 
20.01.11
13:04
(19) юникод не работает.
22 sergeante
 
20.01.11
13:06
/\w/.test('z')
true
/\w/.test('ф')
false
23 sergeante
 
20.01.11
13:07
остаётся только диаппазоны указывать
24 Живой Ископаемый
 
20.01.11
13:07
25 Ненавижу 1С
 
гуру
20.01.11
13:08
(22) у меня работает прекрасно в шарпе
26 Ненавижу 1С
 
гуру
20.01.11
13:08
(18) не обязательно
(14) http://mynaf.narod.ru/UniCode.JPG
27 Andry888
 
20.01.11
13:08
(20) ну вычесть цифры и _ можно, да и в зависимости на каком языке пишешь нужно посмотреть справку... ведь состав регулярок везде разный...
28 Ненавижу 1С
 
гуру
20.01.11
13:08
(27) научи вычитать
29 Ненавижу 1С
 
гуру
20.01.11
13:09
+(27) собственно это будет решением
30 Живой Ископаемый
 
20.01.11
13:09
читать:
"Matching a Specific Code Point"
или
"Unicode Blocks"
31 sergeante
 
20.01.11
13:09
(25) значи юзают разные библиотеки, и более того, разные диалекты наверняка
32 Andry888
 
20.01.11
13:12
(28) так озвучь на чем пишешь то...
33 Ненавижу 1С
 
гуру
20.01.11
13:13
(32) пишу на шарпе, но казалось что основа регвыражений везде общая
34 Ненавижу 1С
 
гуру
20.01.11
13:20
отлично, всем спасибо \p{L} - выдает только буквы
35 Живой Ископаемый
 
20.01.11
13:27
вот тут
http://www.regular-expressions.info/posixbrackets.html
в графе "Unicode"
36 Andry888
 
20.01.11
13:27
во нашел ... [ базовая_группа -[ исключенная_группа ]]
37 Живой Ископаемый
 
20.01.11
13:29
конкретно:
"Word characters (letters, numbers and underscores)"- "[\p{L}\p{N}\p{Pc}]"
38 Ненавижу 1С
 
гуру
20.01.11
13:32
(37) сенкс
(36) кстати да: [\w-[\d]] - любая буква или _
39 Лефмихалыч
 
20.01.11
13:32
[_|0-9|a-z]{0,1}[_|0-9|a-z]*
40 Ненавижу 1С
 
гуру
20.01.11
13:33
(39) плохо читаешь, не вник еще ))
41 Лефмихалыч
 
20.01.11
13:33
или проще так
[_|\d|\w]{0,1}[_|\d|\w]*
42 Ненавижу 1С
 
гуру
20.01.11
13:34
(41) нельзя на цифру начинать
43 Лефмихалыч
 
20.01.11
13:34
(40) ветку не читал. про "Любой алфавит" между глаз попало. Вот (41) исправился
44 Ненавижу 1С
 
гуру
20.01.11
13:36
(43) неа ни разу \w кстати дает любую букву, цифру или _
по крайней мере в шарпе
45 Лефмихалыч
 
20.01.11
13:36
не, уита получается
46 Ненавижу 1С
 
гуру
20.01.11
13:36
в общем итог такой:

public static bool IsIdentifier(string value)
       {
           Regex regex = new Regex(@"^([\w-[\d]])\w*$");
           return regex.IsMatch(value);
       }
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан