¿Regex coincide con todo después del signo de interrogación?

125

Tengo un feed en Yahoo Pipes y quiero hacer coincidir todo después de un signo de interrogación.

Hasta ahora he descubierto cómo hacer coincidir el signo de interrogación usando ..

\?

Ahora solo para que coincida con todo lo que está después / sigue al signo de interrogación.

marca
fuente
2
\?.*coincide con todo (incluida una cadena vacía) después ?.
Khachik
¿Que lenguaje de programación estas usando?
Mark Byers
1
Para aquellos que usan Java, es"\\?"
CodyBugstein

Respuestas:

251
\?(.*)

Quieres el contenido del primer grupo de captura.

thejh
fuente
15
@Marque si esto es lo que necesita (¡aunque esta pregunta es antigua!), Marque esto como una respuesta.
Pieter VDE
5
@Dreamonic No creas que está sucediendo :(
Starkers
4
@Starkers Tienes razón. No sucederá. Mark no ha vuelto desde entonces Feb 5 '11 at 10:41. Todavía es bueno señalar todos los cambios que obtenemos. Tal vez alguien aprenda de Dreamonic señalando esto.
DutGRIFF
1
¿Cómo capturaría el contenido después del último signo de interrogación? Quiero 'anclar' a partir de entonces; no estoy seguro de si anclar es la palabra correcta.
BKSpurgeon
2
@BKSpurgeon primer grupo de captura en ^. * \? ([^?] *) $ Debería funcionar
thejh
61

Prueba esto:

\?(.*)

Los paréntesis son un grupo de captura que puede utilizar para extraer la parte de la cadena que le interesa.

Si la cadena puede contener nuevas líneas, es posible que deba usar el modificador "puntuar todo" para permitir que el punto coincida con el carácter de la nueva línea. Si tiene que hacer esto o no, y cómo hacerlo, depende del idioma que esté utilizando. Parece que olvidó mencionar el lenguaje de programación que está utilizando en su pregunta.

Otra alternativa que puede utilizar si su idioma admite aserciones de búsqueda atrás de ancho fijo es:

(?<=\?).*
Mark Byers
fuente
Oh, ¿el ancho fijo? ¿Puedo mirar hacia atrás para algo como esto? Temas: código, programación, diseño. ¿Así que quiero seleccionar los dos puntos y mirar hacia atrás hasta el cpaital T de los temas y hacia el final de la línea? (en este caso extremo de la línea es "diseño".
Marcos
@Mark: ¿Qué idioma estás usando?
Mark Byers
Estoy usando Yahoo Pipes que exceptúa las expresiones regulares. Obtuve esta pregunta respondida y ahora estoy buscando una expresión regular que seleccione 6 caracteres detrás de dos puntos y tantos (todos) hacia adelante ..
Mark
@Mark: Revisé tu lista de preguntas pero no veo la nueva. ¿Estás seguro de haberlo publicado?
Mark Byers
Haré esta nueva pregunta nuevamente en unos momentos. Supongo que es mejor mantener mis preguntas separadas y realmente debería haber hecho las dos al mismo tiempo. Gracias
Mark
36

Con la técnica de mirar atrás positivo :

(?<=\?).*

(Estamos buscando un texto precedido por un signo de interrogación aquí)

Input: derpderp?mystring blahbeh
Output: mystring blahbeh

Ejemplo

Básicamente, ?<=es una construcción de grupo, que requiere el signo de interrogación de escape, antes de que se pueda hacer cualquier coincidencia.

Funcionan muy bien, pero no todas las implementaciones los admiten.

DarkNeuron
fuente
13
\?(.*)$

Si desea hacer coincidir todos los caracteres después de "?" puede usar un grupo para que coincida con cualquier carácter, y será mejor que use el signo "$" para indicar el final de la línea.

s3v3n
fuente
1
En la mayoría de las implementaciones de expresiones regulares, el .valor predeterminado no coincide con el carácter de nueva línea. Como resultado, incluso sin el carácter de final de línea en la expresión, coincidiría hasta el final de la línea.
Mark Byers
2

Visite este sitio: http://rubular.com/ Básicamente, el sitio le permite ingresar un texto de ejemplo (lo que estaría buscando en su sitio) y luego, a medida que crea la expresión regular, resaltará lo que se está comparando tiempo real.

Austin Lin
fuente
Gracias por eso, ¿sabes cómo hacer coincidir dos puntos? ¿Y una cierta cantidad de caracteres antes de los dos puntos?
Marcar el
/([a-zA-Z]{4}):/coincidirá Test: Welcomey agarraráTest
Austin Lin
0

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

A veces es malo usar esto cuando desea seleccionar qué más eliminar entre "" y no puede usarlo más de dos veces en una cadena. Todo lo que hace es seleccionar lo que no esté entre "" y reemplazarlo con nada.

Incluso para mí es un poco confuso, pero intentaré explicarlo. ^.+?(nada OPCIONAL) hasta el primero y "luego |O / detener (aún investigando lo que realmente significa) hasta que no ^.haya seleccionado nada hasta antes del segundo "uso ( |detener / en). Y seleccione todo lo que viene después con. +.

Kadhem
fuente
Considere agregar una descripción de su código para que sepamos qué hace y por qué.
Pika, el mago de las ballenas