Подстрока Postive Lookahead с регулярным выражением - PullRequest
4 голосов
/ 04 июня 2010

Я довольно плохо знаком с регулярными выражениями, и чем больше я их использую, тем больше они мне нравятся. Я работаю над регулярным выражением, которое должно удовлетворять следующим условиям:

  1. Должен начинаться с символа Альфа
  2. Из следующих трех символов хотя бы один должен быть символом Альфа.
  3. Все, что находится после первых четырех символов, является автоматическим соответствием.

В настоящее время у меня есть следующее регулярное выражение: ^[a-zA-Z](?=.*[a-zA-Z]).{1}.*$

Проблема, с которой я сталкиваюсь, заключается в том, что мой позитивный взгляд (?=.*[a-zA-Z]).{1} не ограничен следующими тремя символами, следующими за буквенным символом.

У меня такое чувство, будто мне не хватает понятия здесь. Чего мне не хватает в этом выражении?

Спасибо всем.

Ответы [ 4 ]

3 голосов
/ 04 июня 2010

.* в вашем взгляде делает это. Вы должны ограничить диапазон здесь как

^[a-zA-Z](?=.{0,2}[a-zA-Z]).{1}.*$

Редактировать : Если вы хотите убедиться, что в строке есть как минимум 4 символа, вы можете использовать другой способ просмотра, например:

 ^[a-zA-Z](?=.{3})(?=.{0,2}[a-zA-Z]).{1}.*$
3 голосов
/ 04 июня 2010

Что вы хотите посмотреть вперед? Почему бы просто не использовать

^[a-zA-Z](..[a-zA-Z]|.[a-zA-Z].|[a-zA-Z]..)

и быть счастливым?

1 голос
/ 04 июня 2010

Вам, вероятно, придется сделать обходной путь. Что-то вроде:

^[a-z](?=([a-z]..|.[a-z].|..[a-z])).{3}.*
  • Первый символ [a-z]
  • Положительный прогноз, первый, второй или третий символ - это a-z ([a-z]..|.[a-z].|..[a-z])
  • Другие вещи
0 голосов
/ 04 июня 2010

Измените * в вашем прогнозе на ?, чтобы получить m/^[a-zA-Z](?=.?[a-zA-Z]).{1}.*$

Если я понимаю ваши критерии, это исправляет их из-за изменения жадности.

Они правильно подобраны:

a2a3-match
2aaa-no match
Aaaa-match
a333-no match
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...