2010-11-18 10 views
15

Uso de Rubí + expresiones regulares, teniendo en cuenta:rubí, usando expresiones regulares para encontrar algo en medio de dos cadenas

[email protected]

Quiero obtener simplemente: 31313131313

es decir, lo que está entre starting-middle+ y mysite.com

Esto es lo que tengo hasta ahora:

to = '[email protected]' 

to.split(/\+/@mysite.com.*/).first.strip 
+1

esta pregunta es muy similar a su [otra pregunta] (http://stackoverflow.com/ preguntas/4219999/ruby-regex-help) dos horas después. –

Respuesta

30

Entre el 1 + y primera @:

to[/\+(.*?)@/,1] 

Entre el 1 + y última @:

to[/\+(.*)@/,1] 

Entre última + y última @:

to[/.*\+(.*)@/,1] 

Entre última + y primera @:

to[/.*\+(.*?)@/,1] 
+0

muy agradable, gracias por la ayuda rápida. – AnApprentice

+0

a [/\+(.*?)@/, 1] - ¿El número 1 es para la primera coincidencia encontrada en la cadena? – stack1

+2

@ stack1, sí, es para lo que está ** dentro del primer '()' **. Al igual que '.match (//) [1]' o '.match (//). Group (1)' en algunos otros idiomas. Por lo general, estás recuperando la subcadena única al aplicar expresiones regulares, por lo que el ', 1' es bastante habitual en Ruby. – Nakilon

3

Aquí es una solución sin expresiones regulares (mucho más fácil para mí leer):

i = to.index("+") 
j = to.index("@") 
to[i+1..j-1] 
+0

esto funciona, pero hay demasiadas líneas de código :) por cierto, ¿dónde se hacen preguntas para su sitio web codequizzes? – stack1

+0

@ stack1- Yo hago todas las preguntas en CodeQuizzes :) – Powers

Cuestiones relacionadas