Java regex - сначала должна быть буква X (без учета регистра), остальные цифры - PullRequest
0 голосов
/ 15 мая 2018

Мне нужно сопоставить, чтобы увидеть, имеет ли строка формат X [d] .... Она должна иметь букву X (с интенсивным регистром) в начале и по крайней мере 1 цифру после. Я попробовал следующее регулярное выражение, но оно не совпадает ни с чем:

 ^(?i)[x](?=.*[0-9])*$

   // ^(?i)[x] - first character needs to be x (case intensive)
   // (?=.*[0-9]) - should have at least one digit after and must be all digits after

Ответы [ 2 ]

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

Используйте следующее.

^(?i)x\d+$

Это означает регистр x без учета регистра, за которым следуют одна или несколько цифр 0-9. Там нет необходимости в скобках вокруг х, потому что это не набор. Это только один персонаж.

Кроме того, вы можете создать набор, состоящий из верхнего и нижнего регистра x.

^[xX]\d+$
0 голосов
/ 15 мая 2018

В 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+ символов, кроме символов разрыва строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...