Hej!
Jag får in dessa typ av data:
conn 192.168.0.1 pass hej
conn 192.168.0.1:27015 password hej
connect 192.168.0.1 hej
192.168.0.1:27015 hej
Det är alltså olika connection strings.
Det jag vill få ut är ip-numret (192.168.0.1), och när satt port-numret (27015) och lösenordet "hej".
För att ta ut ip-numret har jag:
\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
Mina kunskaper är begränsade här så jag skulle gärna vilja ha lite hjälp :) Det bästa vore om jag fick tre separerade uttryck (en för ip, en för port och en för lösenordet).
Tack på förhand!
Skall raden börja med ett IP nummer? Och är det alltid den porten eller kan det variera? Och kan lösenordet innehålla mellanslag?
Vilket språk skall det vara till? php, .net, ruby?
Skall raden börja med ett IP nummer?:
Inte nödvändigtvis, det kan börja med "conn 192.168.1.33"
Och är det alltid den porten eller kan det variera?
Det kan vara olika portnummer, men det är alltid ett nummer! "[0-9+]"?
Och kan lösenordet innehålla mellanslag?
Nej
Vilket språk skall det vara till?
C++ i detta fall
\b((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)):(\d+) ([^\s]+)$
träffar endast "192.168.0.1:27015 hej" på texten:
conn 192.168.0.1 pass hej
conn 192.168.0.1:27015 password hej
connect 192.168.0.1 hej
conn [b]192.168.0.1:27015 hej[/b]
och:
conn 192.168.0.1 pass hej
conn 192.168.0.1:27015 password hej
connect 192.168.0.1 hej
[b]192.168.0.1:27015 hej[/b]
\d = 0-9 vet ej om c++ klarar det men.
Grupper $1 = IP $2 = port $3 = lösenordet.
(med Multiline i regExp options).
Tack,
Sträng att testa mot: conn 192.168.1.33:27015 pass hej
RexExp:
\b((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)):(\d+)
Ger mig:
- 192.168.1.33
- 27015
Om jag lägger till " ([^\s]+)$" på slutet matchar det inte. Verkar vara något fel där.
Sen funkar det inte om jag t.ex. tar bort ":27015" då matchar det inte heller. Många av de connection strings jag får in innehåller inte porten.
* Jag testade i http://www.utvecklarna.se/verktyg/regular_expression_validator.php
Tack!
Vilka av dina exemplen skall matchas? uttrycket säger just nu att port nummer måste finnas:
\b((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)):?(\d+)? ([a-z\d]+)
Alla exempel måste kunna matchas, helst i en regexp men måste man dela upp på flera är det ok.
Jag testade din senaste regexp du skickade men får resultatet:
- 192.168.1.33
- 27015
- pass <- pass istället för hej
på "conn 192.168.1.33:27015 pass hej"
Port måste INTE finnas.
Tack för din hjälp!
\b((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)):?(\d+)?(?: (?:password|pass))? ([a-z\d]+)
Om det nu alltid är password eller pass som kan finnas.
Jag insåg nu att om jag skriver något av:
192.168.1.33
conn 192.168.1.33
conn 192.168.1.33:27015
Det bästa vore om det gick att göra så att man bara ska kunna ange ip-numret så får man ip-numret och "undefined" på port och password. Samma om man skriver både ip-numret och port-numret då ska man få "undefined" på bara passwordet. Är detta möjligt?
Du får väl se om du får något i match[1] i ditt uttryck för port = om den finns eller längden är 0 => undefined.