Java Пример регулярного выражения - PullRequest
0 голосов
/ 11 февраля 2020

Я хочу использовать регулярное выражение в java. Однако мой код печатает false , и я хочу знать, что не так с моим кодом, потому что я хочу напечатать true , чтобы продолжить мои логики c.

CODE :

import java.util.regex.Matcher
import java.util.regex.Pattern

def input = "/[ANY]/Java/Groovy*/Test"
Pattern pattern = Pattern.compile(Pattern.quote("Groovy(.*?)\$"))
Matcher matcher = pattern.matcher(input)
println(matcher.find())

Ответы [ 2 ]

3 голосов
/ 11 февраля 2020

Проблема в том, что вы используете Pattern.quote при построении шаблона. Этот метод создает необработанную версию шаблона, которая будет соответствовать буквально. Другими словами

Pattern.compile(Pattern.quote(".*")) 

Не будет соответствовать «любому входу», а буквально будет только входом, который состоит из точки и звездочки: .*

Просто удалите этот вызов и оставьте Pattern.compile("Groovy(.*?)$").

Пример выполнения

Вы также можете удалить экранирование $ в строке, так как оно не требуется. В строковом литерале последовательность \$ создает содержимое $, которое аналогично использованию $ в первую очередь. Это тот контент , который используется движком регулярных выражений для определения значения шаблона. Так что если вы do хотите экранировать символ для механизма регулярных выражений , вам нужно экранировать его дважды

  1. для строки, поэтому строковый литерал "\\$" создает содержимое \$
  2. Для движка регулярных выражений, который будет использовать содержимое \$ и определит, что это литерал $, а не специальный символ конца строки.

Кроме того, как отметил в комментарии Wiktor Stribiżew , нет необходимости для ? вызывать ленивое сопоставление. Использование Pattern.compile("Groovy(.*)") будет достаточно.

1 голос
/ 11 февраля 2020

Благодаря @VLAZ. Ответ:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class HelloWorld {
    public static void main(String[] args) {
      String input = "/[ANY]/Java/Groovy*/Test";
      Pattern pattern = Pattern.compile("Groovy(.*?)$");
      Matcher matcher = pattern.matcher(input);
      System.out.println(matcher.find());
    }
}
...