2010-04-05 5 views
1

Мне нужно tokenize некоторые строки, которые будут разделены в соответствии с операторами, такими как = and !=. Я успешно использовал регулярное выражение, пока строка не указала оператор !=. В моем случае строка была разделена на две части, что ожидается, но знак ! находится в левой части, даже если он является частью заданного оператора. Поэтому я считаю, что регулярное выражение не подходит для него, и я хочу извлечь выгоду из lex. Поскольку у меня недостаточно знаний и опыта работы с lex, я не уверен, соответствует ли это моей работе или нет. В принципе, я пытаюсь заменить правую сторону операторов фактическими значениями из других данных. Вы думаете, что это может быть полезно для моего случая?различение строки с помощью flex

Спасибо.

ответ

1

Следует ли использовать lex? Это зависит от того, насколько сложным является ваш язык. Это очень мощный инструмент, заслуживающий понимания (особенно с yacc, или на Java вы можете использовать antlr или javacc).

public String[] split(String regex) принимает регулярное выражение, а не только строку. Вы можете использовать регулярное выражение «!? =», Что означает ноль или один !, за которым следует =. Но проблема с использованием split заключается в том, что он не скажет вам, что такое фактический разделитель.

С какими небольшими сведениями мы имеем о вашем приложении, у меня возникнет соблазн использовать регулярные выражения. Здесь много экспертов, чтобы помочь. Отличным местом для начала является Java regex tutorial.

(Спасибо Falle1234 за собирание свою ошибку -. Теперь исправленный) "!? ="

+1

Регулярное выражение должно быть вместо "+ =!". ? это «нуль или один» -индикатор, а не +, что указывает один или несколько. – Falle1234