Är det "eMail" du vill flagga för att få ut e-post? eller är det bara e-post mönstret?
RegExp känns som det självklara valet i så fall.
10 svar · 594 visningar · startad av Quid
Hej, jag har en tabell i en databas som innehåller en massa text, t.ex.
<DWUser version="5.1.0.1" uid="18" oid="1" dw4uid="ROBERT" guid="c9c37de3-a7cc-4c22-b996-8e90b63ec89d" oguid="effbdb06-e9d5-437e-80d7-fd79577b5b33" name="robert" active="true" eMail="robert@domän.se" distribution="NetworkStartup" oldIniSettingsForDw="[3610844937Basket]
DISPLAYMODE=0
[leverant_12809116.169_RESULT]
COLFIXED=1
COLUMNWIDTHS=00173000340004000069000630009700083
[Kundfakt_12833897.778_RESULT]
COLFIXED=0
COLUMNWIDTHS=000830009200065000650002100048000380004200042
[5822078DW5WASTE]
DISPLAYMODE=0
" oldIniSettingsForViewer="[Dacs4]
Color=002550025500000
TextColor=002550000000000
FontSize=20
LineSize=5
MerkerSize=50
LastOCRSetting=
LastBarcodeSetting=
FontBold=400
FontItalic=0
" securityLevel="Normal"></DWUser>
Jag vill bara ha ut själva epostadressen, i detta fallet <robert@domän.se>, men den kan variera ifrån post till post.
Hur löser jag det?
Är det "eMail" du vill flagga för att få ut e-post? eller är det bara e-post mönstret?
RegExp känns som det självklara valet i så fall.
Det där ser ut som en del ur ett XML-dokument.
Om så är fallet så kan du läsa attributen med XMLDOM istället.
voigtann1 skrev:
Är det "eMail" du vill flagga för att få ut e-post? eller är det bara e-post mönstret?
RegExp känns som det självklara valet i så fall.
Det kommer alltid att stå eMail framför adressen som jag vill ha ut.
Troxy skrev:
Det där ser ut som en del ur ett XML-dokument.
Om så är fallet så kan du läsa attributen med XMLDOM istället.
Ja, det är en del av ett XML-dokument som är lagrat i en databas, men det måste läsas ifrån databasen.
Quid skrev:
Ja, det är en del av ett XML-dokument som är lagrat i en databas, men det måste läsas ifrån databasen.
Är det ett giltigt XML-dokument i sin helhet?
Isf, läs dokumentet med Microsoft.XMLDOM, hämta attributet med XPath.
Set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.LoadXML(data)
xml.SetProperty("SelectionLanguage", "XPath")
attr = xml.SelectNodes(xpath)
Just XPath-biten är jag dålig på
voigtann1: Uttrycker sig, så känns regexp som det naturliga valet i detta..
Men mönster.. det är inte min grej.
Inte min heller
<%
Response.Write GetValue(Str, "guid")
Function GetValue(str, target)
With New RegExp
.Global = True
.IgnoreCase = True
.Pattern = target & "=""([^""]+)"""
Dim m, match
set m = .Execute(str)
For each match in m
GetValue = match.SubMatches(0)
Next
End With
End Function
%>
Med din sträng ovan får jag ut resultatet:
c9c37de3-a7cc-4c22-b996-8e90b63ec89deffbdb06-e9d5-437e-80d7-fd79577b5b33
behöver kanske inte köra for each loop men it works
Klockrent, tack.
Orkar du förklara hur det funkar?
Själv skrev jag ihop en annan lösning, som funkar, men den känns inte lika snygg
v_split = Split(v_string," ")
For Each item In v_split
IF lcase(left(item, 5)) = "email" THEN
v_strip = Replace(item, "eMail=", "")
v_strip = Left(v_strip, (Len(v_strip) -1))
v_strip = Right(v_strip, (Len(v_strip) -1))
v_email = v_strip
END IF
Next
RegExp mönstret letar efter (i mitt exempel) efter ett uttryck:
guid="([^"]+)"
Vi skapar en grupp () för att kunna få ut datan ifrån vad det nu är för data
[^"]+ = Träffa allt som INTE är " mellan en träff till hur många träffar den kan hitta (greedy)
För varje träff vi hitta (regExp.execute) så hämtar vi ut gruppen 1 (i arrayn är det 0)
GetValue = match.SubMatches(0)