Java Regex отрицательное ожидание неправильного соответствия
Я ищу строки, где присутствуют две первые цифры (в любом порядке) в цифрах, которые следуют за пробелом. Сначала я попытался
(\d)(\d)\s\d*(\1|\2)\d*[\1\2&&[^\3]][\d]*
но кажется, что я не могу использовать скобки с обратными ссылками. Я попытался использовать функцию просмотра, вместо
(\d)(\d)\s\d*(\1|\2)\d*(?!\3(\1|\2))\d*
но я не прав. Идея заключалась в том, чтобы "искать две цифры, за которыми следует пробел, за которым следуют ноль или более цифр, затем одна из захваченных цифр, затем ноль или более цифр, за которыми следует одна из захваченных цифр". который не тот, который я получил раньше, за которым следуют ноль или более цифр ".21 20329 - это совпадение. Почему? Как мне найти нужные мне строки?
1 ответ
Решение
Это проще
^(\d)(\d) (?=.*?\1)(?=.*?\2)\d+
Посмотреть демо
- Первый предварительный просмотр гарантирует, что цифра, захваченная Группой 1, присутствует где-то позже в строке.
- Второе предположение гарантирует, что цифра, полученная Группой 2, присутствует где-то позже в строке.
- Если эти условия соблюдены,
\d+
съедает все цифры после пробела.