Busco un ejemplo de aplicación de una expresión regular a una secuencia de E/S Java que no simplemente convierta la secuencia en una cadena ya que me gustaría conservar los datos binarios. La mayoría de los ejemplos en Internet se centran en los datos de texto ...Aplicar una expresión regular a Java I/O Stream
Respuesta
Convierta la transmisión en una matriz de bytes.
Se debe mencionar que esto solo tiene sentido si la entrada se puede cargar en la memoria en términos de su tamaño y el tiempo necesario para la carga! Eso significa que necesita saber la longitud de los datos proporcionados por la secuencia para escribir un programa confiable. ¡Conocer la longitud de entrada de una secuencia contradice su propósito de proporcionar datos potencialmente infinitos! –
Las operaciones Regex se deben realizar en cadenas, que son bytes codificados de datos binarios. No puede realizar operaciones regex en bytes de datos, no tiene idea de lo que representan.
-1 No estoy de acuerdo. No hay ninguna razón por la cual no pueda aplicar expresiones regulares a datos binarios. Los datos binarios no significan que no tienes idea de lo que representan. –
Supuestamente, podría tomar una secuencia de 0 y 1 y realizar expresiones regulares sobre ella. Sin embargo, ninguna de las API Java existentes le da acceso a esa secuencia sin procesar sin convertirla en algo más significativo. –
+1 de acuerdo, Aplicar una expresión regular en datos binarios no tiene sentido. Los Regexps están fundamentalmente orientados a cadenas, se definen mediante cadenas, por lo que siempre utilizarás una codificación de cadena, explícita o implícitamente. –
La funcionalidad necesaria no está presente en Java Standard. Tendrá que usar jakarta regexp, y específicamente, la clase StreamCharacterIterator. Esta clase encapsula un InputStream para su uso en operaciones de expresión regular.
Si desea utilizar el paquete de expresiones regulares estándar, sugeriría tomar un la fuente de la clase anterior here y cambiar el contrato mediante la implementación de CharSequence en lugar de CharacterIterator.
Un problema con la implementación de CharSequence es que la interfaz requiere que la clase implemente 'public int length()'. Si está leyendo desde una transmisión, no sabrá la duración y no podrá devolver una respuesta al motor de expresiones regulares. – monkeysplayingpingpong
Intente usar Ragel - herramienta de expresión regular con devoluciones de llamadas de transiciones.
Se puede aplicar a las secuencias y trozos.
- 1. ¿Aplicar un Regex en Stream?
- 2. ¿Expresión regular para encontrar una expresión regular?
- 3. Expresión regular simple de Java
- 4. Java expresión regular operador OR
- 5. ¿Hay una expresión regular para detectar una expresión regular válida?
- 6. Comprueba si una expresión regular cubre otra expresión regular
- 7. Me gustaría aplicar una expresión regular de manera eficiente a un archivo completo
- 8. expresión regular "contiene" otra expresión regular
- 9. Hacer una expresión regular de JavaScript equivalente a una expresión regular PHP
- 10. java - cadena dividida usando la expresión regular
- 11. Buscar una expresión regular en una lista de arrays java
- 12. Expresión regular de Java ejecutando muy lento
- 13. cómo negar cualquier expresión regular en Java
- 14. expresión regular de java Buscar y reemplazar
- 15. Java expresión regular con un guión
- 16. extracción de correo electrónico java expresión regular?
- 17. Una expresión regular rápida necesaria
- 18. expresión regular de java que devuelve falso
- 19. expresión regular de Java con lookahead
- 20. ¿Expresión regular de Java para números negativos?
- 21. ¿Puede Java String.indexOf() manejar una expresión regular como parámetro?
- 22. ¿Usar expresión regular en css?
- 23. ¿Cómo validar una expresión regular?
- 24. ¿Cómo descompilar una expresión regular?
- 25. Simplifica una expresión regular compleja
- 26. Expresión regular con an = y a;
- 27. Expresión regular de una palabra determinada
- 28. Expresión regular para alfanumérico
- 29. Significado de libra (#) en una expresión regular
- 30. La construcción de una expresión regular Compositor
¿Qué estás buscando hacer? ¿Rechazar datos que no coinciden con la expresión regular? ¿Y con qué quieres unir si no estás interesado en las cuerdas? Alguna aclaración sería buena –
Solo por aclaración: una conversión a caracteres y volver a datos binarios puede tener un impacto en el rendimiento, pero no se perderá ni un solo byte debido a la conversión. – rwitzel
posible duplicado de [Ejecución de expresiones regulares en una secuencia] (http://stackoverflow.com/questions/3013669/performing-regex-on-a-stream) –