webForumDet fria alternativet

Reguljärt uttryck strular lite

10 svar · 682 visningar · startad av xcalibrate

xcalibrateMedlem sedan aug. 2002136 inlägg
#1

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!

voigtann1Medlem sedan juni 20019 519 inlägg
#2

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?

xcalibrateMedlem sedan aug. 2002136 inlägg
#3

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

voigtann1Medlem sedan juni 20019 519 inlägg
#4
\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).

xcalibrateMedlem sedan aug. 2002136 inlägg
#5

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!

voigtann1Medlem sedan juni 20019 519 inlägg
#6

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]+)
xcalibrateMedlem sedan aug. 2002136 inlägg
#7

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!

voigtann1Medlem sedan juni 20019 519 inlägg
#8
\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.

xcalibrateMedlem sedan aug. 2002136 inlägg
#9

Tack!

xcalibrateMedlem sedan aug. 2002136 inlägg
#10

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?

voigtann1Medlem sedan juni 20019 519 inlägg
#11

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.

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)