Estoy tratando de crear una expresión regular de Java para dividir cadenas del formato general "foo - bar" en "foo" y "barra" usando Pattern.split(). El carácter "-" puede ser uno de varios guiones: el ASCII '-', el guión largo, el doble guión, etc. Yo he construido la siguiente expresión regular:Coincidencia de guiones Unicode en expresiones regulares de Java?
private static final Pattern titleSegmentSeparator = Pattern.compile("\\s(\\x45|\\u8211|\\u8212|\\u8213|\\u8214)\\s");
el cual, si Estoy leyendo la documentación del patrón correctamente, debería capturar cualquiera de los guiones Unicode o el ascii dash, cuando esté rodeado en ambos lados por espacios en blanco. Estoy usando el patrón de la siguiente manera:
String[] sectionSegments = titleSegmentSeparator.split(sectionTitle);
No joy. Para la entrada de muestra siguiente, el guión no se detecta y titleSegmentSeparator.matcher (sectionTitle) .find() devuelve falso!
Para asegurarme de que no me faltaba ninguna entidad de carácter inusual, utilicé System.out para imprimir algunos datos de depuración. El resultado es el siguiente: a cada carácter le sigue la salida de (int) char, que debería ser su 'punto de código unicode', ¿no?
entradamuestra:
Estudio Resumen (1 de 10) - Competencia
S (83) t (116) u (117) d (100) y (121) (32) S (83) u (117) m (109) m (109) a (97) r (114) y (121) (32) ((40) 1 (49) (32) o (111) f (102) (32) 1 (49) 0 (48)) (41) (32) - (8211) (32) C (67) o (111) m (109) p (112) e (101) t (116) i (105) t (116) i (105) o (111) n (110)
Es me parece que ese dash es el punto de código 8211, que debería ser igualado por la expresión regular, ¡pero no lo es! ¿Que está pasando aqui?
A partir de los documentos: "las cuerdas '\ u2014' y '\\ u2014', mientras que no es igual, compilar en el mismo patrón, que coincide con el carácter con el valor 0x2014 hexadecimal. " Es decir, puedes eliminar el doble \\ en tu expresión. – aioobe
@aioobe: ¡Qué gran coincidencia es que los documentos de Java hayan usado exactamente un personaje como ejemplo de lo que se trata esta pregunta. ¿O modificaste la cita? –
coincidencia :-) – aioobe