Spanish Hace el Regex.Matcher , Dim m As Matcher = Regex.Matcher("([+-]\d+\.\d+)", location)

Situ LLC

Active Member
Licensed User
Longtime User
Para mucho de nosotros aveces usamos funciones que hacen algo pero no sabemos como , haber
Echelen un ojo a esto..
Le pregunte a IA Gemini..

Esta línea de código en B4X (Basic4android, B4J, B4i) se utiliza para identificar y extraer coordenadas geográficas (latitud y longitud) (* bueno en este caso especifico *) de una cadena de texto que sigue el estándar ISO-6709.

Aquí tienes el desglose detallado de lo que hace cada parte:

1. El objeto Matcher​

Dim m As Matcher declara un objeto que se encargará de buscar coincidencias dentro de un texto basándose en un patrón específico. A diferencia de un simple Contains o IndexOf, el Matcher permite extraer partes específicas del texto encontrado (grupos).

2. El Patrón Regex: "([+-]\d+\.\d+)"​

Este es el "corazón" de la instrucción. Es una Expresión Regular que busca números decimales con signo. Se descompone así:

  • (...): Los paréntesis crean un Grupo de Captura. Esto permite que, una vez encontrada la coincidencia, puedas extraer solo el valor numérico usando m.Group(1).
  • [+-]: Busca un carácter que sea obligatoriamente un signo de más (+) o un signo de menos (-).
  • \d+: Busca uno o más dígitos numéricos (la parte entera).
  • \.: Busca un punto decimal literal (se pone la barra invertida porque en Regex el punto por sí solo significa "cualquier carácter").
  • \d+: Busca uno o más dígitos numéricos (la parte decimal).

3. El funcionamiento en el contexto del foro​

En el hilo de B4X Programming Forum que estás consultando, el usuario recibe del video una cadena como esta: "+52.6139-002.1460/"

Cuando ejecutas el código propuesto por el usuario TILogistic:

  1. Primera búsqueda (m.Find): El Matcher encuentra +52.6139. Al llamar a m.Group(1), obtienes la Latitud.
  2. Segunda búsqueda (m.Find): El Matcher continúa desde donde se quedó y encuentra -002.1460. Al llamar de nuevo a m.Group(1), obtienes la Longitud.


Sencilla mente alucinante.. o_Oo_Oo_O
 

TILogistic

Expert
Licensed User
Longtime User
Bien, Aquí puede probar el regex

y estas en lo correcto, el find busca el siguiente substring del patron del matches.

B4X:
        If m.Find Then lat = m.Group(1)
        If m.Find Then lon = m.Group(1)

Es similar al hacerlo con Do While Matcher1.Find

1772075183345.png
 
Top