Ответ 1
Регулярное выражение is(?= all)
соответствует буквам is
, но только если они немедленно, за которыми следуют буквы all
Аналогично, регулярное выражение is(?=there)
соответствует буквам is
, но только если они немедленно, за которыми следуют буквы there
Если вы объединили два в is(?= all)(?=there)
, вы пытаетесь сопоставить буквы is
, но только если они немедленно, за которыми следуют буквы all
И буквы there
в то же время... , что невозможно.
Если вы хотите совместить буквы is
, но только если они сразу следуют или буквами all
или буквы there
, то вы можете использовать:
is(?= all|there)
Если, с другой стороны, вы хотите совместить буквы is
, но только если они немедленно, за которыми следуют буквы all there
, то вы можете просто использовать:
is(?= all there)
Что делать, если я хочу is
следовать за all
и there
, но где угодно в строке?
Затем вы можете использовать что-то вроде is(?=.* all)(?=.*there)
Ключ к пониманию lookahead
Ключ к lookarounds должен понять, что lookahead - это утверждение, которое проверяет, что что-то следует, или предшествует в определенной позиции в строке. Вот почему я сразу выделил . Следующая статья должна развеять любую путаницу.
Ссылка