I started in 1983, in 2007 i still on a case!
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
[quot автор]Руководство для разработчиков .NET Framework
Классы регулярных выражений
В следующих разделах приводится описание классов регулярных выражений NET Framework.
Regex
Класс Regex предоставляет неизменное регулярное выражение (только для чтения). В нем также содержатся статические методы, которые позволяют использовать другие классы регулярных выражений без явного создания экземпляров других классов.
В следующем примере кода создается экземпляр класса Regex и определяется простое регулярное выражение при инициализации объекта. Необходимо обратить внимание на использование дополнительной обратной косой черты в качестве escape-знака, который обозначает, что обратная косая черта в группе \s должна обрабатываться как знак.
[Visual Basic]
' Declare object variable of type Regex.
Dim r As Regex
' Create a Regex object and define its regular expression.
r = New Regex("\s2000")
[C#]
// Declare object variable of type Regex.
Regex r;
// Create a Regex object and define its regular expression.
r = new Regex("\\s2000");
Match
Класс Match предоставляет результаты поиска соответствий регулярному выражению. В следующем примере метод Match класса Regex возвращает объект типа Match после нахождения первого соответствия во входной строке. В данном примере используется свойство Match.Success класса Match для указания на то, найдено ли соответствие.
[Visual Basic]
' cCreate a new Regex object.
Dim r As New Regex("abc")
' Find a single match in the input string.
Dim m As Match = r.Match("123abc456")
If m.Success Then
' Print out the character position where a match was found.
' (Character position 3 in this case.)
Console.WriteLine("Found match at position " & m.Index.ToString())
End If
[C#]
// Create a new Regex object.
Regex r = new Regex("abc");
// Find a single match in the string.
Match m = r.Match("123abc456");
if (m.Success)
{
// Print out the character position where a match was found.
// (Character position 3 in this case.)
Console.WriteLine("Found match at position " + m.Index);
}
MatchCollection
Класс MatchCollection предоставляет последовательность успешных не перекрывающихся соответствий. Данная коллекция является неизменной (только для чтения) и не имеет открытого конструктора. Экземпляры MatchCollection возвращаются свойством Regex.Matches.
В следующем примере метод Matches класса Regex используется для заполнения MatchCollection всеми соответствиями, найденными во входной строке. В данном примере коллекция копируется в массив строк, каждая из которых содержит соответствие, и в массив целых чисел, указывающий расположение каждого соответствия.
[Visual Basic]
Dim mc As MatchCollection
Dim results( 20 ) As String
Dim matchposition( 20 ) As Integer
' Create a new Regex object and define the regular expression.
Dim r As New Regex("abc")
' Use the Matches method to find all matches in the input string.
mc = r.Matches("123abc4abcd")
' Loop through the match collection to retrieve all
' matches and positions.
Dim i As Integer
For i = 0 To mc.Count - 1
' Add the match string to the string array.
results(i) = mc(i).Value
' Record the character position where the match was found.
matchposition(i) = mc(i).Index
Next i
[C#]
MatchCollection mc;
String[] results = new String[ 20 ];
int[] matchposition = new int[ 20 ];
// Create a new Regex object and define the regular expression.
Regex r = new Regex("abc");
// Use the Matches method to find all matches in the input string.
mc = r.Matches("123abc4abcd");
// Loop through the match collection to retrieve all
// matches and positions.
for (int i = 0 ; i < mc.Count; i++)
{
// Add the match string to the string array.
results[i] = mc[i].Value;
// Record the character position where the match was found.
matchposition[i] = mc[i].Index;
}
GroupCollection
Класс GroupCollection предоставляет коллекцию найденных групп и возвращает набор групп как одно соответствие. Данная коллекция является неизменной (только для чтения) и не имеет открытого конструктора. Экземпляры GroupCollection возвращены в коллекцию, которая возвращает свойство Match.Groups.
В следующем примере текстового приложения находится и печатается число групп, соответствующий регулярному выражению. Как извлечь каждое из найденных соответствий из коллекции группы см. в примере Capture Collection следующего раздела.
[Visual Basic]
Imports System
Imports System.Text.RegularExpressions
Public Class RegexTest
Public Shared Sub RunTest()
' Define groups "abc", "ab", and "b".
Dim r As New Regex("(a(b))c")
Dim m As Match = r.Match("abdabc")
Console.WriteLine("Number of groups found = " _
& m.Groups.Count.ToString())
End Sub
Public Shared Sub Main()
RunTest()
End Sub
End Class
[C#]
using System;
using System.Text.RegularExpressions;
public class RegexTest
{
public static void RunTest()
{
// Define groups "abc", "ab", and "b".
Regex r = new Regex("(a(b))c");
Match m = r.Match("abdabc");
Console.WriteLine("Number of groups found = " + m.Groups.Count);
}
public static void Main()
{
RunTest();
}
}
В этом примере на выходе выдается следующий результат.
[Visual Basic]
Number of groups found = 3
[C#]
Number of groups found = 3
CaptureCollection
Класс CaptureCollection предоставляет последовательность найденных подстрок и возвращает наборы соответствий отдельно для каждой группы. Если в регулярном выражении используются кванторы, такая группа может сохранить более одной строки для одного найденного соответствия. Свойство Captures, объект класса CaptureCollection, также является объектом классов Match и Group и обеспечивает доступ к набору захваченных подстрок.
Например, если используется регулярное выражение((a(b))c)+ (где квантор + задает одно или несколько соответствий) для поиска соответствий в строке "abcabcabc", CaptureCollection для каждой соответствующей группы будет содержать по три члена.
В следующем примере текстового приложения используется регулярное выражение (Abc)+ для поиска одного или нескольких соответствий в строке "XYZAbcAbcAbcXYZAbcAb". В данном примере показано применение свойства Captures для возврата нескольких групп найденных подстрок.
[Visual Basic]
Imports System
Imports System.Text.RegularExpressions
Public Class RegexTest
Public Shared Sub RunTest()
Dim counter As Integer
Dim m As Match
Dim cc As CaptureCollection
Dim gc As GroupCollection
' Look for groupings of "Abc".
Dim r As New Regex("(Abc)+")
' Define the string to search.
m = r.Match("XYZAbcAbcAbcXYZAbcAb")
gc = m.Groups
' Print the number of groups.
Console.WriteLine("Captured groups = " & gc.Count.ToString())
' Loop through each group.
Dim i, ii As Integer
For i = 0 To gc.Count - 1
cc = gc(i).Captures
counter = cc.Count
' Print number of captures in this group.
Console.WriteLine("Captures count = " & counter.ToString())
' Loop through each capture in group.
For ii = 0 To counter - 1
' Print capture and position.
Console.WriteLine(cc(ii).ToString() _
& " Starts at character " & cc(ii).Index.ToString())
Next ii
Next i
End Sub
Public Shared Sub Main()
RunTest()
End Sub
End Class
[C#]
using System;
using System.Text.RegularExpressions;
public class RegexTest
{
public static void RunTest()
{
int counter;
Match m;
CaptureCollection cc;
GroupCollection gc;
// Look for groupings of "Abc".
Regex r = new Regex("(Abc)+");
// Define the string to search.
m = r.Match("XYZAbcAbcAbcXYZAbcAb");
gc = m.Groups;
// Print the number of groups.
Console.WriteLine("Captured groups = " + gc.Count.ToString());
// Loop through each group.
for (int i= 0 ; i < gc.Count; i++)
{
cc = gc[i].Captures;
counter = cc.Count;
// Print number of captures in this group.
Console.WriteLine("Captures count = " + counter.ToString());
// Loop through each capture in group.
for (int ii = 0 ; ii < counter; ii++)
{
// Print capture and position.
Console.WriteLine(cc[ii] + " Starts at character " +
cc[ii].Index);
}
}
}
public static void Main() {
RunTest();
}
}
Этот пример выдает следующий результат.
[Visual Basic]
Captured groups = 2
Captures count = 1
AbcAbcAbc Starts at character 3
Captures count = 3
Abc Starts at character 3
Abc Starts at character 6
Abc Starts at character 9
[C#]
Captured groups = 2
Captures count = 1
AbcAbcAbc Starts at character 3
Captures count = 3
Abc Starts at character 3
Abc Starts at character 6
Abc Starts at character 9
Group
Класс Group предоставляет результаты для одной регулярной группы. Поскольку в зависимости от кванторов Group должен сохранять для каждого соответствия или одну строку, или ни одной, или несколько строк, в нем содержится коллекция объектов Capture. Поскольку Group наследуется от Capture, к последней найденной подстроке возможно прямое обращение (сам экземпляр Group эквивалентен последнему элементу коллекции, возвращенному свойством Captures).
Экземпляры Group возвращаются свойством Match.Groups(groupnum) или Match.Groups("groupname"), если используется конструкция "(?<groupname>)".
В следующем примере кода используются вложенные конструкции групп для поиска и сохранения подстрок.
[Visual Basic]
Dim matchposition( 20 ) As Integer
Dim results( 20 ) As String
' Define substrings abc, ab, b.
Dim r As New Regex("(a(b))c")
Dim m As Match = r.Match("abdabc")
Dim i As Integer = 0
While Not (m.Groups(i).Value = "")
' Copy groups to string array.
results(i) = m.Groups(i).Value
' Record character position.
matchposition(i) = m.Groups(i).Index
i = i + 1
End While
[C#]
int[] matchposition = new int[20];
String[] results = new String[20];
// Define substrings abc, ab, b.
Regex r = new Regex("(a(b))c");
Match m = r.Match("abdabc");
for (int i = 0; m.Groups[i].Value != ""; i++)
{
// Copy groups to string array.
results[i]=m.Groups[i].Value;
// Record character position.
matchposition[i] = m.Groups[i].Index;
}
В этом примере на выходе возвращается следующий результат.
[Visual Basic]
results(0) = "abc" matchposition(0) = 3
results(1) = "ab" matchposition(1) = 3
results(2) = "b" matchposition(2) = 4
[C#]
results[0] = "abc" matchposition[0] = 3
results[1] = "ab" matchposition[1] = 3
results[2] = "b" matchposition[2] = 4
В следующем примере кода используются именованные конструкции для поиска групп в строке формата "DATANAME:VALUE". В регулярном выражении двоеточие (:) используется в качестве разделителя.
[Visual Basic]
Dim r As New Regex("^(?<name>\w+):(?<value>\w+)")
Dim m As Match = r.Match("Section1:119900")
[C#]
Regex r = new Regex("^(?<name>\\w+):(?<value>\\w+)");
Match m = r.Match("Section1:119900");
Это регулярное выражение возвращает на выходе следующий результат.
[Visual Basic]
m.Groups("name").Value = "Section1"
m.Groups("value").Value = "119900"
[C#]
m.Groups["name"].Value = "Section1"
m.Groups["value"].Value = "119900"
Capture
Класс Capture содержит результаты для одной регулярной группы.
В этом примере выполняется цикл по коллекции Group, из каждого члена Group извлекается коллекция Capture, и переменным posn и length присваивается положение найденной последовательности в исходной строке и длина последовательности.
[Visual Basic]
Dim r As Regex
Dim m As Match
Dim cc As CaptureCollection
Dim posn, length As Integer
r = New Regex("(abc)*")
m = r.Match("bcabcabc")
Dim i, j As Integer
i = 0
While m.Groups(i).Value <> ""
' Grab the Collection for Group(i).
cc = m.Groups(i).Captures
For j = 0 To cc.Count - 1
' Position of Capture object.
posn = cc(j).Index
' Length of Capture object.
length = cc(j).Length
Next j
i += 1
End While
[C#]
Regex r;
Match m;
CaptureCollection cc;
int posn, length;
r = new Regex("(abc)*");
m = r.Match("bcabcabc");
for (int i= 0 ; m.Groups[i].Value != ""; i++)
{
// Capture the Collection for Group(i).
cc = m.Groups[i].Captures;
for (int j = 0 ; j < cc.Count; j++)
{
// Position of Capture object.
posn = cc[j].Index;
// Length of Capture object.
length = cc[j].Length;
}
}[/quot]
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Руководство для разработчиков .NET Framework
Использование XML в .NET Framework
Классы XML в .NET Framework предоставляют полный интегрированный набор классов для работы с XML-документами и данными. Классы XML в .NET Framework можно разделить на несколько групп: анализ и написание XML с помощью XmlReader и XmlWriter, проверка XML с помощью XmlValidatingReader и редактирование XML-документа с помощью XmlDocument. Классы XslTransform, XmlSchema и XPathNavigator поддерживают выполнение преобразований XSL (XSLT), редактируя язык определения схем XML (XSD) и используя Xpath-запросы.
В этом разделе
Общие сведения об архитектуре XML в .NET Framework
Обзор архитектуры XML в .NET Framework.
Общие сведения о расширениях безопасности для пространства имен System.XML
Обзор расширений безопасности для System.XML в .NET Framework версии 1 . 1 . Кратко описаны классы, на которые влияют изменения, и предоставлены ссылки на разделы, содержащие подробные сведения по этим вопросам.
Модель объектов XML-документов
Описано, каким образом обеспечивается соответствие класса XmlDocument и связанных с ним классов спецификациям поддержки пространств имен в объектной модели документов W3C (базовой) уровней 1 и 2 .
Чтение XML с помощью класса XmlReader
Описано, каким образом класс XmlReader предоставляет некэшированный однонаправленный доступ только для чтения к XML-данным в XML-потоке.
Запись XML с помощью класса XmlWriter
Описано, каким образом класс XmlReader предоставляет способ создания некэшированных однонаправленных XML-потоков и помогает пользователю в построении XML-документов.
Преобразования XSLT с помощью класса XslTransform
Описание реализации классом XslTransform рекомендаций XSLT 1 . 0 по преобразованию XML-документов и поддержки компилированных сценариев с помощью Visual Basic, C# и JavaScript.
Класс XPathNavigator в .NET Framework
Функциональность XPath — это возможность запроса хранилища данных для некоторого узла или набора узлов. XPathNavigator — это класс, предоставляющий методы, необходимые для реализации Xpath-запросов в любом хранилище данных, основанный на модели данных, описанной в рекомендациях по языку XML Path (XPath) 1 . 0 (www.w3.org/TR/xpath.html).
Модель объектов XML-схемы
Описаны классы, используемые для построения и работы с XML-схемами (XSD) с помощью предоставления класса XmlSchema для загрузки и изменения схемы.
Проверка XML-документов со схемами
Описаны имеющиеся в .NET Framework проверки определения типа документа (DTD), схемы приведенных XML-данных (XDR) и XML-схемы (XSD).
Интеграция XML с реляционными данными и ADO.NET
Описано, каким образом в .NET Framework обеспечивается синхронный доступ (в режиме реального времени) как к реляционному, так и иерархическому представлению данных с помощью объектов DataSet и XmlDataDocument.
Разрешение внешних ресурсов XML с именами URI
XmlResolver — это абстрактный класс, разрешающий внешние ресурсы XML, именованные с помощью URI.
Кодировка знаков имен XML и преобразование типов данных
Описано осуществление кодировки и декодировки имен в XML-данных классом XmlConvert.
Преобразование типов данных XML
Описано выполнение строго типизированного преобразования XML-данных классом XmlConvert.
Пространства имен в XML-документе
Описано создание и использование классом XmlNamespaceManager необходимых пространств имен с сохранением префикса и представляющего его пространства имен.
авторБиблиотека классов .NET Framework
System.Runtime.Remoting.Channels.Http - пространство имен
Пространство имен System.Runtime.Remoting.Channels.Http содержит каналы, которые используют HTTP-протокол для передачи сообщений и объектов в удаленные местоположения и обратно. По умолчанию для передачи HTTP-каналы кодируют объекты и вызовы методов в формате SOAP, но в конфигурационных свойствах канала могут указываться другие приемники кодирования и декодирования форматера. Один из наиболее важных классов пространства имен System.Runtime.Remoting.Channels.Http в классе HttpChannel.
Класс HttpChannel комбинирует класс HttpClientChannel и класс HttpServerChannel и может использоваться для получения и передачи сообщений с помощью HTTP-протоколов.
Иерархия пространства имен
Классы
Класс Описание
HttpChannel Обеспечивает реализацию для канала «отправитель-получатель», который использует HTTP-протокол для передачи сообщений.
HttpClientChannel Обеспечивает реализацию для канала клиента, который использует HTTP-протокол для передачи сообщений.
HttpRemotingHandler Реализует обработчик ASP.NET, который передает запросы в HTTP-канал удаленного доступа.
HttpRemotingHandlerFactory Инициализирует новый экземпляр класса HttpRemotingHandler.
HttpServerChannel Обеспечивает реализацию для канала сервера, который использует HTTP-протокол для передачи сообщений.
думаю пока хватит