Мы можем проверить, есть ли цифра в пароле, например, выполнив что-то вроде:
(?=.*\d)
Или есть цифра и строчные буквы с:
(?=.*\d)(?=.*[a-z])
Это в основном будет продолжаться "до конца", чтобы проверить, есть ли буква в строке.
Однако мне было интересно, возможно ли каким-то общим способом ограничить область просмотра. Вот основной пример, который, я надеюсь, продемонстрирует эту точку:
start_of_string;
middle_of_string;
end_of_string;
Я хочу использовать одно регулярное выражение для сопоставления с start_of_string
+ middle_of_string
+ end_of_string
.
Можно ли использовать заглядывание / взгляд назад в разделе middle_of_string
БЕЗ ЗНАНИЯ, ЧТО ПРОИЗОЙДЕТ ДО ИЛИ ПОСЛЕ ЭТОГО ? То есть, не зная размера или содержимого предыдущего / последующего строкового компонента. И ограничить область просмотра только тем, что содержится в этой части строки?
Давайте рассмотрим один пример:
start_of_string = 'start'
middle_of_string = '123'
end_of_string = 'ABC'
Можно ли проверить содержимое каждой части? но ограничить ли его область действия следующим образом?
string = 'start123ABC'
# Check to make sure the first part has a letter, the second part has a number and the third part has a capital
((?=.*[a-z]).*) # limit scope to the first part only!!
((?=.*[0-9]).*) # limit scope to only the second part.
((?=.*[A-Z]).*) # limit scope to only the last part.
Другими словами, могут ли «оглядываться назад» или «оглядываться назад» быть «прикованными» другими компонентами регулярного выражения, если оно не испортит все регулярное выражение?
ОБНОВЛЕНИЕ :
Вот пример, надеюсь, это более полезно для вопроса:
START_OF_STRING = 'abc'
Существует ли в нем 'x'? (?=.*x)
==> False
END_OF_STRING = 'cdxoy'
Есть ли в нем 'y'? (?=.*y)
==> True
FULL_STRING = START_OF_STRING + END_OF_STRING
'abcdxoy'
Возможно ли связать два регулярных выражения любым способом, чтобы работать только с компонентом 'подстроки'? Например, теперь (?=.*x)
в первой части строки вернет True, но не должно.
`((?=.*x)(?=.*y)).*`
Я думаю, что краткий ответ на это "Нет, это невозможно.", НоЯ надеюсь услышать от кого-то, кто понимает это, чтобы сказать, почему это так.