Регулярное выражение для поиска строки с подстановочными символами в строке без разделителей - PullRequest
2 голосов
/ 02 декабря 2011

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

У меня есть строка, которая выглядит примерно так: "ABC1234598901AC"

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

Для упрощения, скажем, я ищу строку "59 (Случайный символ, который не 8) 9".

Сейчас вот мое Регулярное выражение: "59 [^ 8] 9", но когда я использую Matcher в Java, оно совсем не совпадает.

Вот код, который я использую для проверки этого:

Matcher test = Pattern.compile("59[^8]9").matcher("ABC1234598901AC");

if (test.matches())

{

System.out.println(test.start());

System.out.println(test.end());

}

Test.matches () никогда не оценивается как true.

Любая помощь приветствуется, спасибо!

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Вы хотите использовать test.find(), а не test.matches().

Matcher.matches() требует, чтобы ваш шаблон соответствовал входу весь (таким образом, вам нужно будет окружить шаблон .* для его соответствия), тогда как Matcher.find() ищет во входной строке первую (и затем последующую) подстроку, соответствующую вашему шаблону.

1 голос
/ 02 декабря 2011

Вы можете использовать комбинацию Lookahead и OR, например:

input.replaceAll(".*((?=(.989|5.89|59.9|598.))....).*", "$1");

Это будет извлекать строку «5989» из любого ввода с любой одной цифрой, например, она найдет «5989», «3989» или «5949», но не «5181».

Если вам не нужно извлекать совпадение, просто сделайте это:

if (input.matches(".*(.989|5.89|59.9|598.).*")) {
    // it would be true for "5989", "3989" or "5949" but not "5181"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...