Я предполагаю, что вы имели в виду (?=2.*)...
.
(?=2.*)
означает, что следующие символы: 2
, за которым следует одно или несколько предметов. Но регулярное выражение говорит следующий символ должен быть [a-zA-Z]
, так что ничего не будет когда-либо соответствовать (так как символ не может быть 2
и [a-zA-Z]
одновременно.
Простое удаление смотреть вперед (2.*[a-zA-Z]
) является шагом в правильное направление, но в следующем по-прежнему не так:
- не будет ставить первые 2 символа в группе, так что вы можете извлечь его
- Жадный соответствия (
.*
будет соответствовать жадностью, так 234b342d
вместо того, чтобы просто 234b
, а 2d
не будет соответствовать она уже была покрыта предыдущим матчем)
Так положил первые 2 символа в скобках, чтобы положить его в группу и добавить нежадным соответствия (.*?
вместо .*
) ((2.).*?[a-zA-Z]
). Но теперь:
- 2 следует буква не будет соответствовать
Так что нам нужно добавить Двойник позади, чтобы объяснить это.
Итак, наконец, мы получаем:
(2.)((?<=[a-zA-Z])|.*?[a-zA-Z])
А затем извлечь первую группу (как это сделать, зависит от языка).
(2.)
гарантирует, что он начинается с 2 и помещает первые 2 символа в группу.
(?<=[a-zA-Z])
это посмотреть-за учитывать 2d
в вашем примере (а 2
с последующим письмом)
.*?
является нежадным соответствие
[a-zA-Z]
- средство заканчивается символом
Ваш пример не заканчивается с письмо.Пожалуйста, дайте немного более подробную информацию, например. о том, как создается результат вашего матча. – speakr
Я имею в виду извлечение некоторой подстрочной формы «234b342d3», которая имеет букву. результат «23» - это первые две цифры строки «234b». Результат «2d» - это первые две цифры строки «2d». – javie