regulares regular online one negative how for expresiones explanation different regex go

regular - regex one



Negativo Look Ahead Go expresiones regulares (3)

Estoy tratando de usar miradas negativas en Go:

La siguiente expresión regular: BBB(((?!BBB).)*)EEE

http://rubular.com/r/Zw1vopp1MF

Sin embargo en Go me sale:

error parsing regexp: invalid or unsupported Perl syntax: `(?!`

¿Hay alguna alternativa?


Basado en sus ejemplos y su salida esperada, lo siguiente funcionaría.

re := regexp.MustCompile(`BBB([^B]*)EEE`)

GoPlay


El lookahead negativo no se admite por razones técnicas, específicamente porque entra en conflicto con las garantías de tiempo O (n) de la biblioteca. Vea la discusión grupal de golang-nuts sobre esto, así como la sección de Advertencias en Regular Expression Matching in the Wild .

Puedes expresar la expresión regular que has descrito sin lookahead negativo:

BBB([^B]|B[^B]|BB[^B])*EEE

Aquí hay un example para demostrar:

package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`BBB([^B]|B[^B]|BB[^B])*EEE`) fmt.Printf("%#v/n", re.FindAllString("BBB EEE BBB..BBB...EEE", -1)) }


dlclark/regexp2 es un puerto del motor System.Text.RegularExpressions.Regex del marco .NET.

Hay algunas diferencias fundamentales entre las cadenas .NET y las cadenas Go que requieren un poco de préstamo del motor de expresiones regulares del marco Go también. Limpié un par de los bits más sucios durante el puerto (regexcharclass.cs fue terrible), pero el árbol de análisis, el código emitido y, por lo tanto, los patrones coincidentes deben ser idénticos.

Su nombre se dejó caer al final de la larga discusión sobre O (n) expresiones regulares , y se advierte:

Sin embargo, recomendaría cautela ya que hay beneficios para el motor basado en re2 que no son proporcionados por motores con todas las funciones completas con lookarounds. Si tienes la opción, entonces quédate con el stdlib.

El costo de las características es una implementación más lenta.