Это можно сделать с помощью регулярного выражения с использованием lookahead, но это не очень красиво:
Например, чтобы сопоставить указанное в кавычках число, которое содержит ровно одну 2
и одну 3
, вы можете сделать это (для удобства чтения используется подробное регулярное выражение):
" # quote
(?= # Assert that the following can be matched:
[^\D2]* # zero or more numbers except 2
2 # 2
[^\D2]* # zero or more numbers except 2
" # quote
) # End of lookahead
(?=[^\D3]*3[^\D3]*") # same for the number 3
(\d+) # one or more digits, capture the result
" # quote
Для точного совпадения трех 1
с и одного 2
:
" # quote
(?= # Assert that the following can be matched:
(?: # Match the following group:
[^\D1]* # zero or more numbers except 1
1 # 1
){3} # exactly three times.
[^\D1]* # Match zero or more numbers except 1
" # quote
) # End of lookahead
(?=[^\D2]*2[^\D2]*") # as above
(\d+) # one or more digits, capture the result
" # quote
Я не знаю, будет ли это работать со стандартнымиgrep
.