webForumDet fria alternativet

RegExp optional match

9 svar · 1 113 visningar · startad av olsn

olsnMedlem sedan sep. 20093 inlägg
#1

Jag vill plocka ut 3 substrings ut 3 substrings ut en sträng som ser ut så här men kan variera lite.
pubDate = "2009-10-24T19:29:27.332+02:00"

De jag vill ha ut är:
1. 2009-10-24
2. 19:29:27
3. +02:00 (optional)

Dock ska jag kunna få ut #1 och #2 trots att #3 inte matchas.

Så här hade jag tänkt mig men #3 kommer aldrig med. Tar jag bort sista frågetecknet kommer det med ju, men då får jag inte ut #1 och #2 om #3 inte skulle finnas i strängen.

tag.Pattern = "^(\d{4}-\d\d-\d\d)T(\d\d:\d\d:\d\d).*((\+|-)(\d+:\d\d))?"
Set objMatch = tag.Execute(pubDate)
Datetime = objMatch.Item(0).Submatches(0) &" "& objMatch.Item(0).Submatches(1) &" "& objMatch.Item(0).Submatches(2)
prebenMedlem sedan mars 2009452 inlägg
#2

http://weitz.de/regex-coach/

Du verkar duktig på RegEx! Kanske detta programmet kan vara nåt för dig att testa?

Jag är inte helt hemma i denna matchen...

voigtann1Medlem sedan juni 20019 519 inlägg
#3

Mja, det finns ju bättre sätt att skriva ditt uttryck

Fråga, är det det ända som kommer finnas på radan, eftersom du ha ^ i början.

om det är så så kan den se ut:

(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2}).*((?:[\+-]\d+:\d{2})|$)

Tycks inte fungera i ASP, tror du behöver köra två matchningar för att du skall få igång det som du vill.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#4

Verkar funka om man görer så här:

^(\d{4}-\d\d-\d\d)T(\d\d:\d\d:\d\d)\.?\d*([+\-]\d+:\d\d)?$

Edit: $ på slutet, inspirerat av voigtann1.

olsnMedlem sedan sep. 20093 inlägg
#5

Det här fungerade kanon! Tack!

nitro2k01 skrev:

Verkar funka om man görer så här:

^(\d{4}-\d\d-\d\d)T(\d\d:\d\d:\d\d)\.?\d*([+\-]\d+:\d\d)?$

Edit: $ på slutet, inspirerat av voigtann1.

voigtann1Medlem sedan juni 20019 519 inlägg
#6

ändra dock \d\d till \d{2} ser inte direkt snyggt ut om man skall vara ärlig ;)

nitro2k01Medlem sedan aug. 20039 342 inlägg
#7

voigtann1 skrev:

ändra dock \d\d till \d{2} ser inte direkt snyggt ut om man skall vara ärlig ;)

Jag funderade också på det, men kom fram till att olsn nog gör så för att \d\d är ett tecken kortare.

voigtann1Medlem sedan juni 20019 519 inlägg
#8

det är enklare för en människa att läsa det, "jaha, nu är det två tal som skall vara här"... men det kanske är jag.

olsnMedlem sedan sep. 20093 inlägg
#9

voigtann1 skrev:

ändra dock \d\d till \d{2} ser inte direkt snyggt ut om man skall vara ärlig ;)

Hehe, jag insåg inte vilken stilmiss det var :e

onkelborgMedlem sedan juli 2003555 inlägg
#10

\d\d är väl snyggare när det bara handlar om två? Blir så mycket skrot annars helt plötsligt

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