wyrażenie regularne

0

Jak napisać wyrażenie regularne by wyciągnąć to co jest pomiędzy friendlyname a gateway?

4AF7-8039-BE943AADA060}
FriendlyName: Połączenie sieciowe Bluetooth
GatewayAddress: 0.0.0.0
Description:
0

Z opcją multiline:
FriendlyName:(.*?)GatewayAddress:

2

@maszynaz - w komentarzu się niespecjalnie mieści odpowiedź na Twój, więc jako post:

. - dopasowuje dowolny znak
.* dopasowuje dowolną ilość znaków, przy czym jest greedy (to ważne)
.*? tak samo jak powyżej, ale non-greedy.

Czyli .* dopasowuje maksymalną ilość znaków jaką się da żeby regex przeszedł, a .*? - minimalną.
W tym przypadku to bęszie szybsze. Dodatkowo, porównaj co się stanie dla takiego wejścia:

4AF7-8039-BE943AADA060}
FriendlyName: Połączenie sieciowe Bluetooth
GatewayAddress: 0.0.0.0
Description:

4AF7-8039-BE943AADA060}
FriendlyName: Połączenie sieciowe Bluetooth
GatewayAddress: 0.0.0.0
Description:

W przypadku .* - dopasuje jeden wielki ciąg, a w przypadku .*? będą dwa dopasowania (czyli tak jak powinno)

Btw. skoro już piszę - dla większego bezpieczeństwa możesz jeszcze próbować z takim regexem (\n przed gatewayAddress - nie wywali się jeśli w FriendlyName będzie string GatewayAddress).
FriendlyName:(.*?)\nGatewayAddress:

edit: o, monk szybszy o 4 sekundy.

0

Jeśli to po FriendlyName nie jest na więcej niż jedną linijkę, to wystarczy:

FriendlyName: (.*)
(bez singleline)

1

Zastanawiam się czy @maszynaz nie próbuje parsować wyniku wywołania ToString zamiast użyć właściwości.

http://sharppcap.git.sourceforge.net/git/gitweb.cgi?p=sharppcap/sharppcap;a=blob;f=SharpPcap/LibPcap/PcapInterface.cs;h=aab2e89d1789ce08db8969a6cde4a1c55e6e664e;hb=HEAD

 159         public override string ToString()
 160         {
 161             StringBuilder sb = new StringBuilder();
 162             sb.AppendFormat("Name: {0}\n", Name);
 163             if(FriendlyName != null)
 164             {
 165                 sb.AppendFormat("FriendlyName: {0}\n", FriendlyName);
 166             }
 167 
 168             if (GatewayAddress != null)
 169             {
 170                 sb.AppendFormat("GatewayAddress: {0}\n", GatewayAddress);
 171             }
 172 
 173             sb.AppendFormat("Description: {0}\n", Description);
 174             foreach(PcapAddress addr in Addresses)
 175             {
 176                 sb.AppendFormat("Addresses:\n{0}\n", addr);
 177             }
 178             sb.AppendFormat("Flags: {0}\n", Flags);
 179             return sb.ToString();
 180         }

1 użytkowników online, w tym zalogowanych: 0, gości: 1