Eu quero encontrar uma fórmula regex, para encontrar todas as palavras que começam com un|unui|o|unei
seguidas por qualquer palavra, mas depois disso as palavras têm o elemento de conexão"de"
unui model de amintire
un pericol de inundatie
o carte plina de inspiratie
unei casete de sticla
Extraído do texto:
Trebuie sa ma dedic unui model de amintire care sa ma faca sa ma simt bun. Trebuie, mai ales, sa evit un pericol de inundatie care poate afecta fizicul. Am citit chiar azi o carte plina de inspiratie care m-a facut sa ma simt erou. Sunt prizonierul unei casete de sticla care nu se va sparge niciodata.
O resultado, apenas para localizar, não substituir:
model
pericol
carte plina
casete
Meu regex não é tão bom.
ENCONTRAR: un|unui|o|unei(.*?)de\x20\w+
EDITAR para corresponder ao requisito atualizado de não correspondência quando as palavras estão em frases diferentes (presumivelmente em inglês):
A única alteração é
.+?
->[^.?!]+?
que agora corresponde a qualquer coisa, exceto.
,!
e?
de maneira não gananciosa.A maneira mais simples de fazer isso é com a ajuda de
\K
:Explicação:
\b(?:un|unui|o|unei)
- alternativa do início do padrão como um grupo não-capturador, precedido por limite de palavra\s+
- qualquer número de espaços em branco depois dele\K
- comece a combinar nesta posição.+?
- qualquer coisa combinada sem avidez(?=\s+de\s+)
- antecipação positiva da palavrade
precedida por qualquer espaço em branco e terminada com qualquer tipo de limite de palavraIsso se você quiser apenas encontrar as palavras no meio. Se você quiser substituí-los, é muito mais simples com o uso de grupos de captura (outra solução que acabou de ser adicionada gira em torno disso).
^(?:un|unui|o|unei)\h+(.+?)\h+de\h+.+$
$1
. matches newline
Explicação:
Captura de tela (antes):
Captura de tela (depois):