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:
- cadena de etiquetado debe comenzar con
*
seguido de no está en blanco (por lo que* this one*
no debe ser igualada - cadena etiquetado debe terminar con no está en blanco seguido por
*
seguido por espacios en blanco (de modo*this one *
y*this o*ne
no 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([^\*]+)?\*\s
haría?
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.