regex - online - expresiones regulares php
Mi expresión regular coincide demasiado. ¿Cómo lo hago parar? (5)
(Nombre del proyecto: / s + [AZ]: (?: // w +) +. [A-zA-Z] + / s + J [0-9] {7}) (? = :)
Esto funcionará para ti.
Agregar (?: // w +) +. [A-zA-Z] + será más restrictivo en lugar de. *
J0000000: Transaction A0001401 started on 8/22/2008 9:49:29 AM J0000010: Project name: E:/foo.pf J0000011: Job name: MBiek Direct Mail Test J0000100: Machine name: DEV J0000100: Project file: E:/mbiek/foo.pf J0000100: Template file: E:/mbiek/foot.xdt J0000100: Job name: MBiek J0000100: Output folder: E:/foo/A0001401 J0000100: Temp folder: E:/foo/Output/A0001401 J0000100: Document 1 - Starting document J0005000: Document 1 - Text overflowed on page 1 (warning) J0000101: Document 1 - 1 page(s) composed J0000102: Document 1 - 1 page(s) rendered at 500 x 647 pixels J0000100: Document 1 - Completed successfully J0000020:
Tengo esta cadena fea gigante y estoy tratando de extraer piezas de ella utilizando expresiones regulares.
En este caso, quiero tomar todo después de "Nombre del proyecto" hasta la parte donde dice "J0000011:" (el 11 será un número diferente cada vez).
Aquí está la expresión regular con la que he estado jugando
Project name:/s+(.*)/s+J[0-9]{7}:
El problema es que no se detiene hasta que llega al J0000020: al final.
¿Cómo hago para que la expresión regular se detenga en la primera aparición de J [0-9] {7} ?
Bueno, ".*"
Es un selector codicioso. Lo haces no codicioso usando ".*?"
Al usar la última construcción, el motor de expresión regular, en cada paso, emparejará el texto con el "."
intentar emparejar cualquier cosa que venga después del ".*?"
. Esto significa que si, por ejemplo, nada viene después del ".*?"
, entonces no coincide con nada.
Esto es lo que usé. s
contiene tu cadena original. Este código es .NET específico, pero la mayoría de los sabores de expresiones regulares tendrán algo similar.
string m = Regex.Match(s, @"Project name: (?<name>.*?) J/d+").Groups["name"].Value;
Make .*
No codicioso agregando '' ?
'' después de:
Project name:/s+(.*?)/s+J[0-9]{7}:
También te recomiendo que experimentes con expresiones regulares usando "Expresso", es una utilidad de gran utilidad (y gratuita) para la edición y prueba de expresiones regulares.
Una de sus ventajas es que su interfaz de usuario expone una gran cantidad de funciones de expresiones regulares que las personas inexpertas con expresiones regulares podrían no estar familiarizadas, de forma que les sería fácil aprender estos nuevos conceptos.
Por ejemplo, al construir su expresión regular usando la interfaz de usuario, y elegir "*", tiene la posibilidad de marcar la casilla de verificación "Lo mínimo posible" y ver la expresión regular resultante, así como probar su comportamiento, incluso si no estaba familiarizado con expresiones no codiciosas antes.
Disponible para descargar en su sitio: http://www.ultrapico.com/Expresso.htm
Descarga rápida: http://www.ultrapico.com/ExpressoDownload.htm
Usar cuantificadores no codiciosos aquí es probablemente la mejor solución, también porque es más eficiente que la alternativa codiciosa: los partidos ambiciosos generalmente llegan tan lejos como pueden (¡aquí, hasta el final del texto!) Y luego rastrean el carácter tras el personaje para tratar de hacer coincidir la parte que viene después.
Hower, considera usar una clase de personaje negativo en su lugar:
Project name:/s+(/S*)/s+J[0-9]{7}:
/S
significa "todo excepto un espacio en blanco y esto es exactamente lo que quieres".