Estoy buscando un patrón que coincida con todo hasta la primera aparición de un personaje específico, digamos un ";" - un punto y coma .
Yo escribí esto:
/^(.*);/
Pero en realidad coincide con todo (incluido el punto y coma) hasta la última aparición de un punto y coma.
/^(.*?);/
también debería funcionar (se llama no codicioso ), pero las respuestas dadas usando[^;]*
son mejores.\w+(?!([^]+;)|;)
pero esto no es por qué?.+(?!([^]+;)|;)
Respuestas:
Necesitas
El
[^;]
es una clase de caracteres , que coincide con todo menos un punto y coma.Para citar la página de
perlre
manual:Esto debería funcionar en la mayoría de los dialectos de expresiones regulares.
fuente
foo=bar;baz=bax;bab=baf
y coincidióbab=baf
incluso si no hay;
exactamente lo que necesito. No estoy seguro de por qué funciona, aunque si dice especificación partidos todo, pero el símbolo de blanco ...Haría;
¿trabajo?
El
?
es un operador vago, por lo que la expresión regular toma lo menos posible antes de hacer coincidir el;
.fuente
/^[^;]*/
El [^;] dice unir cualquier cosa excepto un punto y coma. Los corchetes son un operador de coincidencia de conjunto, esencialmente, coincide con cualquier carácter de este conjunto de caracteres,
^
al principio lo convierte en una coincidencia inversa, por lo que coincide con cualquier cosa que no esté en este conjunto.fuente
Tratar
/[^;]*/
Google
regex character classes
para más detalles.fuente
Tratar
/[^;]*/
Esa es una clase de personaje de negación .
fuente
texto de ejemplo:
Si, por ejemplo, tenemos el texto de muestra anterior, la expresión regular
/(.*?\;)/
le dará todo hasta la primera aparición de punto y coma (;
), incluido el punto y coma:"this is a test sentence;"
fuente
;
carbón porque no es un carácter especial regex. La agrupación()
tampoco es necesaria. Usted puede ir con/.*?;/
?
personaje hace que la partida sea perezosa (coincida la menor cantidad posible) Piense en los caracteres coincidentes de expresiones regulares hasta el primer punto y coma, luego no va más allá porque se da por vencido (perezoso;))Esta no es una solución de expresiones regulares, sino algo bastante simple para la descripción del problema. Simplemente divida su cadena y obtenga el primer elemento de su matriz.
salida
fuente
Esto fue muy útil para mí, ya que estaba tratando de descubrir cómo hacer coincidir todos los caracteres en una etiqueta xml, incluidos los atributos. Me encontraba con el problema de "coincide todo hasta el final" con:
pero pude resolver el problema con:
Después de leer esta publicación. Gracias a todos.
fuente
<!DOCTYPE>
etiqueta. Como el analizador no fue capaz de manejarlo.Esto coincidirá con la primera aparición solo en cada cadena e ignorará las siguientes.
fuente
"/^([^\/]*)\/$/"
funcionó para mí, para obtener solo las "carpetas" superiores de una matriz como:fuente
Realmente un poco triste que nadie te haya dado la respuesta correcta ...
En regex,? lo hace no codicioso. Por defecto, la expresión regular coincidirá tanto como sea posible (codicioso)
Simplemente agregue un? ¡y no será codicioso y coincidirá lo menos posible!
Buena suerte, espero que ayude.
fuente
encontre eso
funciona bien.
',' siendo el "delimitador" aquí.
fuente