Este:
echo BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BBBBBBBBBBBBBBBBBBBBBBBBBBBBA |
perl -pe '/^(.*?B(?:A.*?B){30})A/'
leva surpreendentes 8 segundos na minha máquina. Eu esperava que levasse no máximo alguns ms.
Isso leva < 10 ms:
echo BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BA BBBBBBBBBBBBBBBBBBBBBBBBBBBBA |
perl -pe '/^(.*?B(?:A.*?B){30})A/'
Como posso fazer o primeiro ir mais rápido?
Vou precisar que A e B sejam expressões regulares, ou seja, não serão simplesmente letras únicas.
Use a antecipação negativa e
.
:Não é muito bonito, mas funciona.