Regex corresponde a tudo após o ponto de interrogação?

125

Tenho um feed no Yahoo Pipes e desejo corresponder tudo após um ponto de interrogação.

Até agora, descobri como combinar o ponto de interrogação usando ..

\?

Agora, apenas para corresponder a tudo o que está depois / segue o ponto de interrogação.

Marca
fonte
2
\?.*corresponde a tudo (incluindo uma string vazia) depois ?.
khachik
Qual linguagem de programação você está usando?
Mark Byers
1
Para aqueles que usam Java, é"\\?"
CodyBugstein

Respostas:

251
\?(.*)

Você quer o conteúdo do primeiro grupo de captura.

thejh
fonte
15
@Marque se é isso que você precisa (mesmo que esta pergunta seja antiga!), Marque isso como uma resposta.
Pieter VDE
5
@Dreamonic Não pense que está acontecendo :(
Starkers
4
@Starkers Você está certo. Isso não vai acontecer. Mark não apareceu desde então Feb 5 '11 at 10:41. Ainda é bom apontar todas as mudanças que recebemos. Talvez alguém aprenda com Dreamonic apontando isso.
DutGRIFF
1
como você capturaria o conteúdo após o último ponto de interrogação? eu quero 'âncora' a partir daí - não tenho certeza se âncora é a palavra certa.
BKSpurgeon
2
@BKSpurgeon primeiro grupo de captura em ^. * \? ([^?] *) $ Deve funcionar
thejh
61

Experimente isto:

\?(.*)

Os parênteses são um grupo de captura que você pode usar para extrair a parte da string na qual está interessado.

Se a string puder conter novas linhas, pode ser necessário usar o modificador "ponto tudo" para permitir que o ponto corresponda ao caractere da nova linha. Se você precisa ou não fazer isso, e como fazer isso, depende do idioma que você está usando. Parece que você se esqueceu de mencionar a linguagem de programação que está usando na sua pergunta.

Outra alternativa que você pode usar se sua linguagem suportar asserções de lookbehind de largura fixa é:

(?<=\?).*
Mark Byers
fonte
Oh, a largura fixa? Posso dar uma olhada atrás de algo assim? Tópicos: código, programação, design Então, eu quero selecionar os dois pontos e olhar para trás até o cpaital T de tópicos e adiante até o fim da linha? (neste caso, o fim da linha é "design".
Marcar
@Mark: Qual idioma você está usando?
Mark Byers
Estou usando o Yahoo Pipes, exceto regex. Eu tenho essa pergunta respondida e agora estou procurando por uma regex que selecione 6 caracteres atrás de dois-pontos e tantos (todos) para a frente ..
Mark
@Mark: Verifiquei sua lista de perguntas, mas não vejo a nova. Tem certeza de que postou?
Mark Byers
Vou fazer essa nova pergunta novamente em alguns momentos. Acho que é melhor manter minhas perguntas separadas e realmente deveria ter perguntado as duas ao mesmo tempo. Obrigado
Mark
36

Com a técnica de olhar para trás positiva :

(?<=\?).*

(Estamos procurando um texto precedido por um ponto de interrogação aqui)

Input: derpderp?mystring blahbeh
Output: mystring blahbeh

Exemplo

Basicamente, o ?<=é uma construção de grupo, que requer o ponto de interrogação de escape, antes que qualquer correspondência possa ser feita.

Eles têm um desempenho muito bom, mas nem todas as implementações os suportam.

DarkNeuron
fonte
13
\?(.*)$

Se você deseja combinar todos os caracteres após "?" você pode usar um grupo para corresponder a qualquer caractere e é melhor usar o sinal "$" para indicar o fim da linha.

s3v3n
fonte
1
Na maioria das implementações de expressão regular, o .padrão não corresponde ao caractere de nova linha. Como resultado, mesmo sem o caractere de final de linha na expressão, ele corresponderia ao final da linha.
Mark Byers
2

Confira este site: http://rubular.com/ Basicamente, o site permite que você insira algum texto de exemplo (o que você estaria procurando em seu site) e, em seguida, conforme você constrói a expressão regular, ela destacará o que está sendo correspondido tempo real.

Austin Lin
fonte
Obrigado por isso, você sabe como combinar dois pontos? E uma certa quantidade de caracteres antes dos dois pontos?
Marcar
/([a-zA-Z]{4}):/vai combinar Test: Welcomee agarrarTest
Austin Lin
0

str.replace(/^.+?\"|^.|\".+/, '');

Isso às vezes é ruim de usar quando você deseja selecionar o que mais remover entre "" e não pode usar mais de duas vezes em uma string. Tudo o que faz é selecionar o que não estiver entre "" e substituí-lo por nada.

Até para mim é um pouco confuso, mas tentarei explicar. ^.+?(nada OPCIONAL) até "então |Or / stop (ainda pesquisando o que isso realmente significa) até / at ^.não selecionou nada até antes do segundo "uso ( |stop / at). E selecione tudo o que vem depois com. +.

Kadhem
fonte
Considere adicionar uma descrição do seu código para que possamos saber o que ele faz e por quê.
Pika o Mago das Baleias