Я должен сделать регулярное выражение в java, чтобы распознать, что строка, которую я пишу в консоли, является строкой пакета класса в java.
Например, эта строка верна: package mx.com.example.aplication;
Но это неверно: Package mx. com. example.aplication
Я должен проверить всю структуру с точками и прописными буквами.
У меня есть это:
^(\bpackage)[\s]{1}[A-Za-z]
Я не могу заставить свою строку оценивать конец с помощью ;
разве вы не должны допускать пробелы после точки с запятой?




Прямо сейчас ваше регулярное выражение просто читает слово package, пробел и затем одну букву. Регулярное выражение ниже должно работать с вашим примером.
^((?:[a-z][a-z\-\_]+))(\s+)((?:[a-z][a-z\.\d\-\_]+)\.(?:[a-z][a-z\-\_]+))(?![\w\.])\s*(;)$
Приведенный выше код регулярного выражения допускает слово «пакет», за которым следует пробел, за которым следует полное доменное имя, а затем точка с запятой. Таким образом, он проверит всю строку.
Хейс Роуч, я пробовал с вашим выражением, и оно работает, но если я попробую с большей линией, то это не сработает :(
О, хорошо, это странно, и что вы подразумеваете под большей линией? Я хочу понять, почему это не работает @SebastianRuizPerez
@SebastianRuizPerez Это должно работать с любой длиной. Можете ли вы опубликовать, какую линию вы использовали, которая не работала?
Я увидел свою ошибку, в моей строке могли быть символы _ и - кстати, если бы моя строка была такой: ‘mx.com.example.whatever; другие слова «Я получаю истину, но я должен получить ложь, моя строка должна заканчиваться на ;
@SebastianRuizPerez Я отредактировал ответ, включив в него _ и -. Он должен закончить его; сейчас. Вы можете проверить это?
Следующее регулярное выражение должно работать:
^\s*package\s*\w+\s*(?:\.\s*\w+\s*)*;\s*$
Обратите внимание, что в java допустимо иметь более одного пробела между частями объявления пакета:
package java . util ;
Регулярное выражение позволяет это. Если вы не хотите этого по какой-либо причине, это регулярное выражение делает свое дело:
^package \w+(\.\w+)*;$
;Вам не подходит;$?