29. februar 2008 - 12:09Der er
9 kommentarer og 2 løsninger
Match 1 eller flere parametre i regex, med php
Jeg har med hjælp fået lavet følgende fungerende kode, som parser linier efter et mønster, jeg har så efterfølgende erfaret at nogen gange logger mit andet program ikke alle parametere og så matcher den ikke mere.. så jeg skal have lavet [ AON: 1 BON: 1 CONS: 11 DON: 12MB ] [INFO: email.send.to.admin ] felterne optional, så de ikke skal være til stede for at den matcher. eks: 2007.02.28-MATCHING_STRING-OK [ AON: 1 CONS: 11 ]
jeg har rodet en del med ()? men det syntes ikke lige at fungere, en der har noget feedback som jeg kan bruge?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
I mine tests matcher den ellers fint. Men det er måske fordi at jeg har gjort nogle antagelser om hvordan at tekststrengen ser ud hvis der mangler et led. Muligvis er min antagelse forkert - men det ved jeg først hvis du viser et eksempel på hvor dan det ser ud når at der mangler noget (komplet med hvor mange blanktegn der så er tilbage og den slags ting - altså et eksempel fra den "virkelige verden").
Når der står (?: ... ) er det egentlig blot det samme som ( ... ) - pointen er at den 1. version ikke forsøger at gemme det der bliver matchet i parentesen i $matches array'et, mens at den 2. version gør.
Jeg skriver i virkeligheden:
(?: ... )?
for at matche et led som nogen gange er der og andre gange ikke er der - det er det ?-tegnet i enden gør. Dette kunne lige så godt være gjort med:
( ... )?
men siden at jeg ikke var interesseret i *hvad* der står på pladsen, men kun *om* den var der eller ej så det blev derfor med "?:".
(.*?)-(.*?)\[\s*(AON:\s*(\d+)\s*)?(BON:\s*(\d+)\s*)?(CONS:\s*(\d+)\s*)?(DON:\s*([^\]]+)\s*)?\](\s*\[\s*INFO:\s+([^\}]+)\])? Den her linie matcher det jeg var ude efter, efter mange timers trial and error. Men nielle send lige et svar du har ihvertfald fortjent halvdelen af de points her, som tak for den indsats du har udført.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.