Estoy intentando crear una expresión regular con el fin de extraer un poco de texto a partir de cadenas. Quiero extraer el texto de las direcciones URL o mensajes de texto normales, por ejemplo:
endpoint/?userId=#someuser.id
O
Hi #someuser.name, how are you?
Y de tanto quiero extraer exactamente #someuser.name
del mensaje y #someuser.id
de la URL. Puede haber haber muchos de los que la cadena de extraer de la URL y mensajes.
Mi expresión regular actualmente se ve así:
(#[^\.]+?\.)([^\W]\w+\b)
Funciona bien, excepto uno para un caso y no sé cómo hacerlo - por ejemplo:
Esas cadenas NO DEBE ser encontrados: # .id
, #.id
. Debe haber al menos un carácter entre #
y .
. Uno o más espacios entre los caracteres no deben ser igualada.
¿Cómo puedo hacer que el uso de expresiones regulares mi actual?
Puedes utilizar
String regex = "#[^.#]*[^.#\\s][^#.]*\\.\\w+";
Vea la demostración de expresiones regulares y su gráfica :
detalles
#
- un#
símbolo[^.#]*
- cero o más caracteres distintos.
y#
[^.#\\s]
- cualquier carbón, pero.
,#
y un espacio en blanco[^#.]*
- - cero o más caracteres distintos.
y#
\.
- un punto\w+
- 1+ caracteres de texto (letras, dígitos o_
).
String s = "# #.id\nendpoint/?userId=#someuser.id\nHi #someuser.name, how are you?";
String regex = "#[^.#]*[^.#\\s][^#.]*\\.\\w+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group(0));
}
Salida:
#someuser.id
#someuser.name