regex - palabra - expresiones regulares java
¿Cómo agrupo expresiones regulares más allá de la novena referencia inversa? (3)
OK, la coincidencia no es un problema, su ejemplo coincide conmigo en el Bloc de notas actual ++. Éste es un punto importante. Para usar expresiones regulares de PCRE en Notepad ++, necesita una versión> = 6.0 .
El otro punto es, ¿dónde quieres usar la referencia inversa? Puedo usar referencias con nombre sin problemas dentro de la expresión regular , pero no en la cadena de reemplazo.
medio
(?''a''[0-9]*),([0-9]*),/g{a}
coincidirá
1000,1001,1000
Pero no conozco una forma de usar grupos con nombre o grupos> 9 en la cadena de reemplazo.
¿Realmente necesita más de 9 referencias inversas en la cadena de reemplazo? Si solo necesita más de 9 grupos, pero no todos en el reemplazo, cree los grupos que no necesita para reutilizar los grupos que no capturan , agregando un ?:
Al comienzo del grupo.
(?:[0-9]*),([0-9]*),(?:[0-9]*),([0-9]*)
group 1 group 2
Ok, así que estoy intentando agrupar más allá de la novena referencia inversa en notepad ++. La wiki dice que puedo usar los nombres de grupo para ir más allá de la novena referencia. Sin embargo, parece que no puedo obtener la sintaxis correcta para hacer la coincidencia. Estoy empezando con solo dos grupos para hacerlo simple.
Data de muestra
1000,1000
Regex.
(?''a''[0-9]*),([0-9]*)
De acuerdo a los docs necesito hacer lo siguiente.
(?<some name>...), (?''some name''...),(?(some name)...)
Names this group some name.
Sin embargo, el resultado es que no puede encontrar mi texto. ¿Alguna sugerencia?
Simplemente puede hacer referencia a grupos> 9 de la misma manera que a <10
Es decir, $ 10 es el décimo grupo.
Por ejemplo (ingenuo):
Cuerda:
ABCDEFGHIJKLMNOPQRSTU VWXYZ
Encontrar regex
(?: a) (b) (c) (d) (e) (f) (g) (h) (i) (j) (k) (l) (m) (n) (o) (p)
Reemplazar:
$ 10
Resultado:
kqrstuvwxyz
Mi prueba se realizó en Notepad ++ v6.1.2 y dio el resultado que esperaba.
Actualización: Esto todavía funciona a partir de v7.5.6
SarcasticSully resucitó esto para hacer la pregunta:
"¿Qué sucede si desea reemplazarse con el primer grupo seguido del carácter ''0''?"
Para hacer esto cambia el reemplazo a:
$ 1 / x30
Que está reemplazando con el grupo 1 y el carácter hexadecimal 30
, que es un 0
en ascii.
Una respuesta muy tardía para ayudar a otros que llegan aquí desde Google (como lo hice). Las referencias inversas nombradas en las sustituciones de notepad ++ se ven así: $+{name}
. Por cualquier razón.
Sin embargo, aquí hay una desviación del regex estándar que se obtuvo aquí ... a las referencias inversas nombradas también se les asignan números. En la expresión regular, si tiene (.*)(?<name> & )(.*)
, Reemplazaría con $1${name}$2
para obtener exactamente la misma línea con la que comenzó. En notepad ++, tendría que usar $1$+{name}$3
.
Ejemplo: necesitaba limpiar un archivo .sln de Visual Studio para configuraciones no coincidentes. El texto que necesitaba reemplazar se veía así:
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.Build.0 = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.ActiveCfg = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.Build.0 = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.ActiveCfg = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.Build.0 = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.ActiveCfg = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.Build.0 = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.ActiveCfg = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.Build.0 = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.ActiveCfg = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.Build.0 = Release|Any CPU
Mi búsqueda RegEx:
^(/s*/{[^}]*/}/.)(?<config>[a-zA-Z0-9]+/|[a-zA-Z0-9 ]+)*(/..+=/s*)(.*)$
Mi reemplazo RegEx:
$1$+{config}$3$+{config}
El resultado:
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.ActiveCfg = Dev|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.Build.0 = Dev|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.ActiveCfg = Dev|x64
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.Build.0 = Dev|x64
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.ActiveCfg = Dev|x86
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.Build.0 = Dev|x86
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.ActiveCfg = QA|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.Build.0 = QA|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.ActiveCfg = QA|x64
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.Build.0 = QA|x64
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.ActiveCfg = QA|x86
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.Build.0 = QA|x86
Espero que esto ayude a alguien.