#java #regex
Вопрос:
Извините, наверное, за глупый вопрос, но я совершенно новичок в регулярном выражении.
Я должен определить, идентичны ли некоторые строки заданному шаблону, можно ли использовать регулярное выражение для идентификации приведенного ниже шаблона? Эти строки должны обрабатываться одинаково в моем проекте.
foo
foo(1)
foo(2)
foo(1)(1)
foo(1)(2)
foo(any number)(any number)(...)(...)
Какая-нибудь помощь? Заранее спасибо.
Комментарии:
1. Предположение о чем-то подобном должно сработать:
foo(([0-9]*))*
все, что находится между()
, является группой и*
указывает, что она может повторяться 0 или более раз.
Ответ №1:
Вы можете использовать регулярное выражение, [A-Za-z] (?:(d ))*
которое можно объяснить следующим образом:
[A-Za-z]
: Любые алфавиты один или несколько раз(?:
: Начало группы без захвата(
: Персонаж(
d
: Одна или несколько цифр)
: Персонаж)
)
: Конец группы без захвата*
: Ноль или более раз
Ответ №2:
Это должно сработать:
([A-z] )(:?(d ))*
([A-z] )
захватываетfoo
или любой другой текст, состоящий из нескольких букв, и сохраняет его в группе 1(:?(d ))*
говорит(<1 or more digits>)
0 или более раз
Регулярные выражения не предназначены для сравнения строк друг с другом. Вы можете сопоставить входные данные с шаблоном.
Вы можете проверить это на основе ваших данных здесь: https://regex101.com/r/MRZxsS/1
Комментарии:
1. Большое вам спасибо!
2. Если вы хотите использовать его в java, вам нужно избежать обратной косой черты, чтобы сжать его в
String
:"[A-z] (:?\(\d \))*"
3. Но это не говорит о том, все ли они идентичны. Например, fff не следует рассматривать так же, как foo, но foo(3) следует рассматривать так же, как foo.
4. Нет. Вы запросили регулярное выражение, соответствующее всем вашим входным значениям, что означает, что вы можете использовать регулярное выражение для всех этих строк-образцов, и регулярное выражение соответствует каждому из них.
5. Я отредактировал регулярное выражение, чтобы
foo
fff
можно было извлечь или,matcher.,group(1)
чтобы вы могли сравнить его