regex para corresponder algo se não for precedido por outra coisa


165

Portanto, com regex em java, quero escrever um regex que corresponda se e somente se o padrão não for precedido por determinados caracteres. Por exemplo:

String s = "foobar barbar beachbar crowbar bar ";

Quero corresponder se a barra não for precedida por foo. Portanto, a saída seria:

barbar
beachbar
crowbar
bar

Eu sei que essa é provavelmente uma pergunta muito simples. Estou tentando aprender regex, mas, enquanto isso, preciso de algo para trabalhar agora.

Respostas:


278

Você deseja usar negative lookbehindassim:

\w*(?<!foo)bar

Onde (?<!x)significa "somente se não tiver" x "antes deste ponto".

Consulte Expressões regulares - pesquisa para obter mais informações.

Editar : adicionado \w*para capturar os personagens antes (por exemplo, "praia").


2
que modificações precisam ser feitas para não coincidir com foo_arbitrary_bar? ie foo bar não imediatamente anterior
Brad Kent

1
@ BradKent (?<!foo).*barcorresponderia a algo assim, eu acredito.
Emyller 17/07/19

@emyller nope. que irá corresponder foobazbar (foo não vem antes foobazbar, para que coincida)
Brad Kent

2
@ BradKent Eu não li o seu "não" em "não corresponde", por isso disse que corresponderia. Seu caso parece um \b(?!foo)\w*bar\bpara mim então.
Emilitar

4
@BradKent Então você pode fazer uma nova pergunta, elaborando o que você está tentando alcançar em detalhes, ou continuar jogando com expressões regulares até encontrá-la. :)
emyller
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.