2012-04-25 3 views
0

Я делаю код, который берет файл и проверяет, является ли он допустимым кодом Java, должен выполняться с использованием регулярных выражений.regex ограничивается одной точкой с запятой

Я просматриваю каждую строку и проверяет, заканчивается ли она; или или }. Однако я, похоже, не могу ограничить его только одним его возникновением. как т.е.

int i=0; 

и

int i=0 ;;;;;;; 

пройдет .. Регулярное выражение, я использую прямо сейчас

.+;{1}\\s*$ 

перепробовал много других вариантов, не похоже на работу. любая помощь будет замечательной! Благодаря

+1

Читайте о жадных соответствия регулярных выражений (или жадных квантификаторов). – BoltClock

ответ

1

Ваша проблема заключается в том, что . также будет соответствовать точка с запятой, поэтому ваше выражение будет соответствовать все, кроме последней точки с запятой, как часть .+.

Чтобы избежать этого, вы можете встретить любого персонажа , за исключением с точкой с запятой, с помощью [^;]. т.е.

[^;]+;\\s*$ 

Однако, вы должны знать, что int i=0 ;;;;;;;;; совершенно правильный код Java.

0

Если вы хотите, чтобы убедиться, что есть только одна точка с запятой в целой строки, а затем использовать:

^[^;]+;{1}\\s*$ 

Это не правильная проверка действительного источника Java однако.

+0

Что значит не проверка? –

+0

Файлы Java могут содержать строки, которые не заканчиваются на {} или; Они могут объединять строки с более точкой с запятой друг за другом и т. Д. Это намного сложнее, чем просто записать его с помощью регулярного выражения с несколькими символами. – Matzi

+0

О, это. Да, знаю. но в упражнении мы не обязаны проверять подобные вещи. нам нужно написать компилятор Simplified-Java, который использует регулярные выражения для проверки кода. S-Java не имеет этих проблем. –

0

Эта часть регулярного выражения: .+ будет соответствовать любому персонажу, включая все, кроме последнего вашего ;.

Вы должны исключить ; из первой части своего регулярного выражения, чтобы вы могли сопоставлять «Все, кроме a, а затем точно одно»; (И как только вы получите, что работает, вы можете расширить свой класс символов, чтобы захватить также {и}, если вы хотите)

НТН

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