expresión regular para que coincida con rebaja sencilla

Michal:

Estoy tratando de averiguar la expresión regular para que coincida con todas las ocurrencias de *this kind of strings*. Dos reglas adicionales lamentablemente hacen esto más complicado de lo que pensaba:

  1. cadena de etiquetado debe comenzar con *seguido de no está en blanco (por lo que * this one*no debe ser igualada
  2. cadena etiquetado debe terminar con no está en blanco seguido por *seguido por espacios en blanco (de modo *this one *y *this o*neno debe ser igualada

Empecé con expresión regular más sencilla \*\S([^\*]+)?\*, que para mi sarta de pruebas:

*foo 1 * 2 bar* foo *b* azz *qu **ux*

partidos lugares entre corchetes:

[*foo 1 *] 2 bar* foo [*b*] azz [*qu *][*ux*]

y esto es lo que me gustaría lograr:

[*foo 1 * 2 bar*] foo [*b*] azz [*qu **ux*]

así que 2 aparecen problemas:

  • cómo expresar en una expresión regular de una regla 2. "búsqueda hasta que primero no espacio en blanco seguido *seguido por espacios en blanco aparece"? búsqueda positiva hacia delante?
  • cómo hacer coincidir los espacios en blanco de la regla 2. pero no incluirlo en consecuencia, lo que \*\S([^\*]+)?\*\sharía?
yavuzkavus:
public class Test {

    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("\\*\\S.*?(?<!\\s)\\*(?=\\s|$)");
        Matcher matcher = pattern.matcher("*foo 1 * 2 bar* foo *b* azz *qu **ux*");
        int i = 1;
        while(matcher.find()) {
            System.out.printf("%d: %s%n", i++, matcher.group());
        }
    }
}

* \ S : * seguido de un char no está en blanco

. *? : Consumir caracteres no codiciosos.

* (<\ s?!) : * después de carbón no está en blanco. Esto está detrás de aspecto negativo, que no consume carbón no está en blanco.

(? = \ s | $) : búsqueda positiva hacia delante. * Debe ser seguido por un espacio en blanco o final de la línea.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=180317&siteId=1
Recomendado
Clasificación