O Melhor Truque de Regex é sobre escrever regexes que correspondem, r1
mas não r2
. O exemplo que eles dão é um regex que corresponde a Tarzan
(e "Tarzan and Jane"
), mas não "Tarzan"
. Depois de passar por algumas coisas que não funcionam, eles dão o "melhor truque de regex de todos os tempos":
"Tarzan"|(Tarzan)
Isso supostamente corresponde à "string ruim" primeiro, pulando a string boa, mas não incluindo a string ruim em um grupo de captura. Se apenas a string boa aparecer, nós correspondemos nela por último e a incluímos no grupo de captura.
Uma desvantagem do "melhor truque de regex" é que isso ainda corresponde a "Tarzan"
, mesmo que não o capture . Você não pode, por exemplo, usá-lo em um condicional sem algum boilerplate extra?
Isto é baseado em regexes estilo PCRE. O Raku usa uma notação regex completamente diferente. É possível fazer o truque de forma mais simples? Idealmente, isto deveria ser possível:
> ('"Tarzan"', 'Tarzan', '"Tarzan and Jane"') <<~~>> /some-regex/
(Nil 「Tarzan」 「Tarzan」)