Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > подскажите регулярку.


Автор: boostcoder 1.4.2011, 22:28
всем доброго вечера.
подскажите с регуляркой. я в них вообще не разбираюсь...

какой тип регулярок?... эм.. вопрос однако.
пример:
Цитата

'()(#[^\r\n]*)()'


в общем нужна регулярка для поиска hex значений, и десятичных, в соответствии с синтаксисом Си.

спасибо.

Автор: gcc 1.4.2011, 23:06
boostcoder, а что такое hex?
это так?
Код

/[0-9A-F]{2}h/

Автор: boostcoder 1.4.2011, 23:08
Цитата(gcc @  1.4.2011,  23:06 Найти цитируемый пост)
а что такое hex?

0x65, 0x45, и т.д..

Автор: froex 1.4.2011, 23:22
Код
\b0x(?:[0-9A-Fa-f]{8})\b

Автор: boostcoder 1.4.2011, 23:55
в общем методом тыка, и подсказок, получил такое выражение:
Цитата

'()(\\b0x[0-9A-Fa-f]{1,})()'

недостаток в том, что если к hex`у дописать что-нибудь, то hex все равно совпадает. а не должен.

Автор: alezzz 2.4.2011, 12:02
boostcoder, зачем нужны пара пустых скобок в начеле и конце выражения?

Автор: boostcoder 3.4.2011, 12:38
alezzz, я не знаю. так в коде записаны другие регулярки.

Автор: alezzz 3.4.2011, 15:47
тогда покажите случай когда к hex что-то дописано и выражение совпадает, что именно там дописано? на каком языке реализуете регулярку (какой библиотекой), ведь не на перле?

Автор: boostcoder 3.4.2011, 15:54
alezzz, вот: http://liveworkspace.org/code/55b6122f4e29ed914025d7ef0f1d7242
в коде редактора вот что записал. но похоже не правильно:
Код

        'precompiler' : {
            'search' : '()(#[^\r\n]*)()' // это выражение писалось не мной, и работает корректно.
            ,'class' : 'precompiler'
            ,'modifiers' : 'g'
            ,'execute' : 'before'
        }
        ,'hexvals' : { // это мое для hex
            'search' : '()(\\b0x[0-9A-Fa-f]{1,})()'
            ,'class' : 'hexvals'
            ,'modifiers' : 'g'
            ,'execute' : 'before'
        }
        ,'decvals' : { // это мое для десятичных
            'search' : '()(\\b[0-9]{1,})()'
            ,'class' : 'decvals'
            ,'modifiers' : 'g'
            ,'execute' : 'before'
        }



Добавлено через 1 минуту и 42 секунды
Цитата(alezzz @  3.4.2011,  15:47 Найти цитируемый пост)
на каком языке реализуете регулярку (какой библиотекой), ведь не на перле?

код написан на JS. не мной. я на с++ пишу.

Добавлено через 4 минуты и 11 секунд
Цитата(boostcoder @  3.4.2011,  15:54 Найти цитируемый пост)
код написан на JS.

упс smile 
так мне в раздел по JS ?
или все таки регулярка перловая?

Автор: alezzz 3.4.2011, 16:47
Цитата

0x56as - тоже строка

это не совсем строка по логике регулярного выражения, тут должно было совпасть "0x56a". 

попробуйте в таком виде:
'()(\\b0x[0-9A-Fa-f]{1,}\\b)()'

и если заработает, то попробуйте еще и без пустых скобок в начале/конце выражения smile

Автор: boostcoder 3.4.2011, 16:55
Цитата(alezzz @  3.4.2011,  16:47 Найти цитируемый пост)
тут должно было совпасть "0x56a"

да. но учитывая что есть еще и символ 's' - это строка. т.е. нужно чтоб регулярка понимала что это не hex.

Цитата(alezzz @  3.4.2011,  16:47 Найти цитируемый пост)
попробуйте в таком виде:

попробовал.
еще регулярку для десятичных изменил так "'()(\\b[0-9]{1,}\\b)()'", и все стало как надо smile
http://liveworkspace.org/code/1caef5d7c1f59ff90c6c0b644928c91a


спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)