Estoy bien con expresiones regulares básicas, pero me pierdo un poco en pos/neg look aheads/behinds.usando regex para omitir todos los caracteres hasta que se encuentre una secuencia específica de letras usando lookahead negativo
Estoy tratando de tirar de la ID # de esto:
[keyword stuff=otherstuff id=123 morestuff=stuff]
Podría haber una cantidad ilimitada de "cosas" antes o después. He estado usando la expresión regular entrenador para ayudar a depurar lo que he intentado, pero no voy a avanzar más ...
Hasta ahora tengo esto:
\[keyword (?:id=([0-9]+))?[^\]]*\]
que se encarga de cualquier atributo adicional después de la identificación, pero no puedo encontrar la manera de ignorar todo entre la palabra clave y la identificación. Sé que no puedo ir [^id]*
Creo que necesito usar un lookahead negativo como este (?!id)*
pero supongo que como es de ancho cero, no avanza desde allí. Esto no funciona bien:
\[keyword[A-z0-9 =]*(?!id)(?:id=([0-9]+))?[^\]]*\]
He estado buscando por todas partes ejemplos, pero no he encontrado ninguna. O tal vez lo hice, pero fueron tan lejos de mi cabeza que ni siquiera me di cuenta de lo que eran.
¡Ayuda! Gracias.
EDIT: También tiene que coincidir con [palabra clave stuff = otherstuff], donde id = no existe en absoluto, así que tengo que tener un 1 o 0 en el grupo id #. También hay otras [otherkeywords id = 32] con las que no quiero hacer coincidir. El documento debe coincidir con varios [id. De palabras clave = 3] en todos los documentos utilizando preg_match_all.
Las soluciones proporcionadas funcionan muy bien y probablemente se comparen más rápido que con cualquier tipo de búsqueda anticipada, definitivamente lo haré de esa manera. Pero para mi propia curiosidad, y tal vez cualquier persona que acierta esta pregunta con google en un futuro lejano, ¿es el método que intenté lograr? Es decir, ¿se puede usar lookaheads para saltear algunas cosas hasta que se golpee una palabra en particular? – phazei