2013-07-01 4 views
1

Я хочу определить парсер, который принимает любой символ, кроме ['(', ')', '{', '}'] в PetitParserDart.Как создать парсер, который означает любой символ не в ['(', ')', '{', '}'], в PetitParserDart?

Я пробовал:

char('(').not() & char(')').not() & char('{').not() & char('}') 

Я не уверен, если это правильно, и это любой простой способ сделать это? (что-то вроде chars('(){}').neg())?

ответ

2

Это соответствует чему угодно, но символы, перечисленные после каретки ^. Это класс характер всех персонажей без перечисленных из них:

pattern('^(){}'); 

Это также работает (обратите внимание на .not() на последнем символе, а any() фактически потребляют символ):

char('(').not() & char(')').not() & char('{').not() & char('}').not() & any() 

И это один работает, а также:

anyIn('(){}').neg() 

Что эквивалентен:

(anyIn('(){}').not() & any()).pick(1) 

И еще одна альтернатива:

(char('(') | char(')') | char('{') | char('}')).neg() 

для второго примера, кроме того, все примеры возвращают анализируемый символ (это может быть легко исправить, но я хотел бы остаться близко к вашему вопросу). Первый пример, вероятно, проще всего понять, но в зависимости от контекста вы можете предпочесть один из альтернатив.

+0

Спасибо, спасибо, спасибо! – Freewind

 Смежные вопросы

  • Нет связанных вопросов^_^