Регулярное выражение для сопоставления возможных слов - PullRequest
2 голосов
/ 06 июля 2011

Я пытался заставить это работать весь день, но я не очень хорош в регулярных выражениях.

Правильно отформатированная строка в моем случае выглядит как

String s = "10 LET D = 4";

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

Сейчас я просто делаю

boolean b = s.matches("[0-9]+ GOTO|LET [a-zA-Z] +|= [0-9]+");

Но я знаю, что с моим GOTO | LET что-то не так, так как я только что сделал это.Это не сработало с квадратными скобками, поэтому я немного растерялся.Возможно ли то, что я пытаюсь сделать с помощью регулярных выражений?Если нет, то есть другие предложения?

Ответы [ 2 ]

4 голосов
/ 06 июля 2011

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

Кроме того, я добавил группировку (скобки) вокруг + и =. Это быстрый способ избежать конфликта, так как + является частью синтаксиса регулярных выражений.

boolean b = s.matches("[0-9]+ (GOTO|LET) [a-zA-Z] [+=] [0-9]+");

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

2 голосов
/ 06 июля 2011

Когда дело доходит до языков программирования, вам, вероятно, нужен анализатор, а не регулярное выражение; однако, это действительно зависит от того, насколько просты правила языка. Вы можете проверить свои регулярные выражения, используя regexpal (вы можете найти кучу тестеров регулярных выражений, прогуглив его).

СОВЕТ: Что вам нужно в отношении goto, и пусть это круглые скобки. Возможно, вы также захотите принять произвольное количество пробелов, если есть хотя бы один пробел. Вы можете сделать это с помощью "\ s +".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...