В Java вы можете использовать
s.matches("(?i)x[0-9]+")
Это будет соответствовать строке, начинающейся с x
или X
и затем имеющей 1 или более цифр.
Вы не должны давать количественную оценкуупреждающее предположение, утверждение нулевой ширины, поскольку это будет означать, что оно будет соответствовать пустому местоположению, а повторное сопоставление означает, что вы все еще там, и индекс регулярного выражения не продвинут.
Однако, Регулярное выражение Java просто игнорирует количественный прогноз .Ваше текущее регулярное выражение, ^(?i)[x](?=.*[0-9])*$
, соответствует x
, но не x5
, поскольку есть только одна часть для сопоставления, [x]
.см. демонстрационную версию Java .
Даже если вы удалите квантификатор *
, ^(?i)[x](?=.*[0-9])$
не будет соответствовать ни одной строке, поскольку $
, конец строки, требуется сразу после x
в то время как (?=.*[0-9])
положительный прогноз требует цифры после любых 0+ символов, кроме символов разрыва строки.