Как сопоставить «любой символ» в регулярном выражении? - PullRequest
231 голосов
/ 26 мая 2010

Должно совпадать следующее:

AAA123
ABCDEFGH123
XXXX123

Могу ли я сделать: ".*123"?

Ответы [ 10 ]

534 голосов
/ 26 мая 2010

Да, вы можете. Это должно работать.

  • . = любой символ
  • \. = фактический символ точки
  • .? = .{0,1} = соответствует любому символу ноль или один раз
  • .* = .{0,} = совпадать с любым символом ноль или более раз
  • .+ = .{1,} = соответствовать любому символу один или несколько раз
47 голосов
/ 26 мая 2010

Да, это будет работать, хотя учтите, что . не будет соответствовать символу новой строки, если вы не передадите флаг DOTALL при компиляции выражения:

Pattern pattern = Pattern.compile(".*123", Pattern.DOTALL);
Matcher matcher = pattern.matcher(inputStr);
boolean matchFound = matcher.matches();
17 голосов
/ 26 мая 2010

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

10 голосов
/ 26 мая 2010

Существует множество сложных инструментов тестирования и разработки регулярных выражений, но если вы просто хотите использовать простой тестовый набор в Java, вот вам для игры:

    String[] tests = {
        "AAA123",
        "ABCDEFGH123",
        "XXXX123",
        "XYZ123ABC",
        "123123",
        "X123",
        "123",
    };
    for (String test : tests) {
        System.out.println(test + " " +test.matches(".+123"));
    }

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

Смотрите также

8 голосов
/ 26 мая 2010

Нет, * будет соответствовать нулю или более символов. Вы должны использовать +, что соответствует одному или более.

Это выражение может работать лучше для вас: [A-Z]+123

3 голосов
/ 24 января 2019

Конкретное решение проблемы примера: -

Попробуйте [A-Z] * 123 $ будет соответствовать 123, AAA123, ASDFRRF123. Если вам нужно хотя бы один символ до 123, используйте [A-Z] +123 $.

Общее решение вопроса (Как сопоставить «любой символ» в регулярном выражении): -

  1. Если вы ищете что-либо, включая пробелы, вы можете попробовать [\ w | \ W] {min_char_to_match,}.
  2. Если вы пытаетесь сопоставить что-либо, кроме пробелов, вы можете попробовать [\ S] {min_char_to_match,}.
2 голосов
/ 22 марта 2017

Попробуйте регулярное выражение. {3,}. Это будет соответствовать всем персонажам, ожидающим новую строку.

0 голосов
/ 15 мая 2019

Тот, который мне помог, на случай, если вам интересно просто проверить любой символ

[^]+
0 голосов
/ 13 марта 2019

Самый распространенный способ кодирования этого кода - класс символов, члены которого образуют разделение множества возможных символов.

Обычно люди пишут это как [\s\S] (пробел или не пробел), хотя [\w\W], [\d\D] и т. Д. Будут работать.

0 голосов
/ 13 марта 2019

Я работаю с этим Не всегда точка означает любой символ. Исключение при однострочном режиме. \ p {все} должно быть

 `String value="|°¬<>!\"#$%&/()=?'\\¡¿/*-+_@[]^^{}";
 String expression="[a-zA-Z0-9\\p{all}]{0,50}";
    if(value.matches(expression)){
        System.out.println("true");
    }else{
        System.out.println("False");
    }`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...