test solo regulares regular probar letras expresiones expresion especiales espacios espacio ejemplos cualquier caracteres caracter blanco alfanumerico regex

regex - solo - Expresión regular para encontrar una cadena incluida entre dos caracteres mientras EXCLUYE los delimitadores



javascript regex test (10)

Este funciona específicamente para el analizador de expresiones regulares de javascript /[^[/]]+(?=])/g

solo ejecuta esto en la consola

var regex = /[^[/]]+(?=])/g; var str = "This is a test string [more or less]"; var match = regex.exec(str); match;

Necesito extraer de una cadena un conjunto de caracteres que se incluyen entre dos delimitadores, sin devolver los delimitadores.

Un ejemplo simple debería ser útil:

Objetivo : extraer la subcadena entre corchetes, sin devolver los corchetes.

Cadena base : This is a test string [more or less]

Si utilizo el siguiente registro. ex.

/[.*?/]

El partido es [more or less] . Necesito obtener solo more or less (sin los paréntesis).

¿Es posible hacer lo?


Fácil hecho

(?<=/[)(.*?)(?=/])

Técnicamente eso es usar lookaheads y look behinds. Ver Lookahead y Lookbehind Cero-Ancho aserciones . El patrón consiste en:

  • está precedido por un [que no se captura (mira por detrás);
  • Un grupo capturado no codicioso. No es codicioso detenerse en el primero]; y
  • es seguido por un] que no es capturado (lookahead).

Alternativamente, puedes simplemente capturar lo que hay entre los corchetes:

/[(.*?)/]

y devuelve el primer grupo capturado en lugar de la partida completa.


PHP:

$string =''This is the match [more or less]''; preg_match(''#/[(.*)/]#'', $string, $match); var_dump($match[1]);


Para eliminar también el uso de []:

/[.+/]


Quería encontrar una cadena entre / y #, pero # a veces es opcional. Aquí está la expresión regular que uso:

(?<=//)([^#]+)(?=#*)


Si está utilizando JavaScript , la primera solución proporcionada por cletus, (?<=/[)(.*?)(?=/]) , No funcionará porque JavaScript no es compatible con el operador lookbehind.

Sin embargo, la segunda solución funciona bien, pero necesita obtener el segundo elemento coincidente.

Ejemplo:

var regex = //[(.*?)/]/; var strToMatch = "This is a test string [more or less]"; var matched = regex.exec(strToMatch);

Volverá

["[more or less]", "more or less"]

Entonces, lo que necesitas es el segundo valor. Utilizar:

var matched = regex.exec(strToMatch)[1];

Regresar:

"more or less"


Si necesita extraer el texto sin los corchetes, puede usar bash awk

echo " [hola mundo] " | awk -F''[][]'' ''{print $2}''

resultado:

hola mundo


Solo necesitas ''capturar'' el bit entre paréntesis.

/[(.*?)/]

Para capturarlo lo pones entre paréntesis. Usted no dice qué idioma está usando esto. En Perl, por ejemplo, accederías a esto usando la variable $ 1.

my $string =''This is the match [more or less]''; $string =~ //[(.*?)/]/; print "match:$1/n";

Otras lenguas tendrán diferentes mecanismos. C #, por ejemplo, usa la clase de colección Match , creo.


Tuve el mismo problema al usar expresiones regulares con scripts de bash. Usé una solución de 2 pasos usando tuberías con grep -o aplicando

''/[(.*?)/]''

primero luego

''/b.*/b''

Obviamente no es tan eficiente en las otras respuestas, sino una alternativa.


[^/[] Empareja cualquier carácter que no sea [.

+ Combina 1 o más de lo que no sea [ . Crea grupos de estos partidos.

(?=/]) Lookahead positivo ] . Coincide con un grupo que termina con ] sin incluirlo en el resultado.

Hecho.

[^/[]+(?=/])

Prueba.

http://regexr.com/3gobr

Similar a la solución propuesta por null. Pero el adicional /] no es necesario. Como nota adicional, aparece / no es necesario escapar de [ después de ^ . Por legibilidad, lo dejaría en.

No funciona en la situación en la que los delimitadores son idénticos. "more or less" por ejemplo.