2012-05-30 3 views
1

Возможно ли использовать вычитание символьного символа регулярного выражения каким-либо образом в GNU sed, GNU awk, GNU grep или в другом месте из bash?вычитание регулярных выражений

Поддерживается ли оно на C++ 11?

Где эта функция поддерживается? Я не смог найти никаких ссылок, кроме этого: http://msdn.microsoft.com/en-us/library/20bw873z.aspx (внизу).

Чтобы быть более конкретным: что это лучший способ преобразовать все цифры, кроме 2 и 5 звездочек, что-то вроде

sed -re 's/[0-9-[25]]/*/g'

+0

Что является целевым языком? C++? C#? Каждый язык имеет разный уровень поддержки регулярного выражения. – nhahtdh

+0

bash и C++ 11. «Bash» означает также sed, grep, tr, awk ... – gluk47

ответ

2

Можно ли использовать регулярное выражение класса символов вычитание в некотором роде в GNU SED, AWK GNU, GNU Grep, или где-нибудь еще из баш?

Нет, не с этими инструментами/реализациями регулярных выражений.

Большинство (популярных) языков не поддерживают это. У Java есть способ сделать это: [0-9&&[^25]] (соответствует любой (ASCII) цифре, кроме '2' и '5'), но я не знаю других реализаций, которые поддерживают это.

Либо использовать отрицательный смотреть вперед (?![25])[0-9] как Игнасио уже предложил, или сделать это "жесткий путь": [1346-9]

См:

+0

Спасибо, ваши ссылки очень интересны. – gluk47

+0

Добро пожаловать @ gluk47. –

2

Способа сделать это с отрицательным lookaheads, но не все регулярное выражение двигатели поддерживают их.

>>> re.match(r'(?![25])[0-9]', '2') 
>>> re.match(r'(?![25])[0-9]', '3') 
<_sre.SRE_Match object at 0x25108b8> 
Смежные вопросы