339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
|
|||||||||||||||||
1 | |||||||||||||||||
Регулярные выражения FAQ18.02.2011, 13:09. Показов 260260. Ответов 4
Как и обещал, выкладываю свой FAQ по Regex для тех кто только начинает с ним знакомиться. По мере углубления своих знаний готов продолжить работу над ним. Если администрации он покажется полезным то можно вынести тему наверх. Надеюсь что кому-то он поможет, мне бы, во всяком случае, для старта он очень пригодился бы.
Regex FAQ. Регулярные выражения – это один из способов поиска подстрок (соответствий) в строках. Осуществляется это с помощью просмотра строки в поисках некоторого шаблона. Для того чтобы использовать Regex в своих программах необходимо в список используемых пространств имен добавить: using System.Text.RegularExpressions; Далее, в коде самой программы необходимо создать экземпляр Regex: Regex newReg = new Regex(pattern,options); Все найденные соответствия в тексте помещаются в тип MatchCollection MatchCollection matches; И далее в этот объект поместить текст, в котором необходимо произвести поиск: matches = newReg.Matches(text); В результате в matches появляются все результаты парсинга. Мы можем посмотреть сколько их (matches.Count), можем узнать значение конкретного элемента (matches[N].Value) pattern – образец или условие для поиска, например, если необходимо найти слово“не” в строке “не может быть”, то pattern для поискабудет выглядеть так: @"не". В простейшем случае, можно обойтись без условия поиска, тогда найдено будет значение точно повторяющее pattern. Можно получить как значение найденного совпадения так и их количество, как видно из примера ниже.
RegexOptions option = RegexOptions.<условие поиска>; Ниже приведены условия поиска. IgnoreCase – находит совпадения независимо от регистра, т.е. прописными или строчными буквами в строке написано слово. IgnorePatternWhitespace – устраняет из шаблона неизбежные пробелы и включает комментарии помеченные «#». Compiled – указывает что регулярное выражение скомпилировано в сборку. Это порождает более быстрое исполнение но увеличивает время запуска. CultureInvariant – указывает игнорирование региональных языковых различий. ExplicitCapture – указывает что единственные допустимые записи являются явно поименованными или пронумерованными группами в форме(?<name>…) Multiline – Многострочный режим. Изменяет значения символов “^” и“$” так что они совпадают соответственно в начале и конце каждой строки, а не только в начале и конце целой строки. RightToLeft – указывает что поиск будет выполнен справа на лево, а не слева на право. Singleline – однострочный режим. None – указывает на отсутствие заданных параметров. Пример с условиями поиска будет выглядеть так:
Используя специальные символы можно создавать более сложные шаблоны для поиска: ^ - указывает на то, что поиск должен начинаться с начала строки, например шаблон (@”^не”) найдет “не” в строке, если она начинается с него: “Не может быть совсем не может быть не”. $ -указывает на то что поиск должен производиться в конце строки, шаблон (@”не$”) найдет “не” в той же самой строке, только если она заканчивается им. {n} – указывает точное число вхождений в строку, например шаблон (@"не{2}") найдет слово “нее” в строке. {n,} – указывает число вхождений не менее n, т.е. шаблон (@"не{2,}") найдет слова “нее”, “неее” и т.д. {n,m} – указывает число вхождений-n и количество символов вхождения-m, то есть шаблон (@"не{2,4}") найдет все слова где количество букв “е” больше 2, но определит только количество букв ”е” равное 4. Т.е. в слове “нееееееееее” он найдет только “нееее”. + - Соответствует 1 или более предшествующих выражений. Например, "не+" соответствует "не" и "нее", но не соответствует "н". *- Соответствует 0 или более вхождений предшествующего выражения. Например, 'не*' соответствует "н" и "нее". ? - Соответствует 0 или 1 предшествующих выражений. Например, 'бы(ло)?' соответствует "бы" в "бы" или "было". В квадратных скобках можно указать диапазон букв или цифр для поиска, например [A-Z] или [0-9] Далее приведен пример для поиска времени в формате 00:00:00 и показана некоторая оптимизация кода.
88
|
18.02.2011, 13:09 | |
Ответы с готовыми решениями:
4
Регулярные выражения - вывод сообщения об ошибке при нахождении в строке выражения, начинающегося с цифры Регулярные выражения Регулярные выражения Регулярные выражения в c# |
Шаровик затейник
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
|
|
18.02.2011, 14:02 | 2 |
Надеюсь автор не будет против, но уверен что информация будет полезна для новичков, дополню тему
[abc] Любой из перечисленных в скобках символов. Используя тире можно указать диапазон символов, например, [a-f] - то же самое, что [abcdef] . [^abc] Любой символ, кроме перечисленных в скобках. \d Цифра. Эквивалентно [0-9] . \D Любой символ, кроме цифр. Эквивалентно [^0-9] . \w Цифра, буква (латинский алфавит) или знак подчеркивания. Эквивалентно [0-9a-zA-Z_] . \W Любой символ, кроме цифр, букв (латинский алфавит) и знака подчеркивания. Эквивалентно [^0-9a-zA-Z_] . \s Пробельный символ (пробел, табуляция, перевод строки и т. п.). \S Любой символ, кроме пробельных. . Любой символ, кроме перевода строки. Для поиска любого символа, включая перевод строки, можно использовать конструкцию [\s\S] . \ Экранирование. Например, символ "." является спецсимволом, если же нужно чтобы он воспринимался буквально, т. е. означал именно точку, то нужно записать так: "\." . a|b Условие "или" (a или b). Так как в данном случае с обеих сторон разделителя ровно по одному символу, то можно заменить на [ab] . (abc) Подвыражение. Соответствующий подвыражению текст запоминается отдельно от общего результата. (?:abc) Подвыражение. Соответствующий подвыражению текст не запоминается. Используется для группировки частей образца, например, /ко(?:т|шка)/ - то же самое, что /кот|кошка/. (?=abc) Поиск с "заглядыванием вперед", срабатывает если соответствие найдено. Например, /Windows (?=95|98|NT|2000)/ найдет "Windows " в строке "Windows 98", но ничего не найдет в строке "Windows 3.1". После сопоставления поиск продолжается с позиции, следующей за найденным соответствием, без учета заглядывания вперед. (?!abc) Поиск с "заглядыванием вперед", срабатывает если соответствие не найдено. Например, /Windows (?!95|98|NT|2000)/ найдет "Windows " в строке "Windows 3.1", но ничего не найдет в строке "Windows 98". После сопоставления поиск продолжается с позиции, следующей за найденным соответствием, без учета заглядывания вперед. \0 Символ NUL. \t Символ табуляции. \v Символ вертикальной табуляции. \r Символ возврата каретки. \n Символ перевода строки. \f Символ перевода формата. \b Граница слова, т. е. позиция между словом и пробелом или переводом строки. \B Любая позиция кроме границы слова. \xhh Символ с кодом hh (2 шестнадцатиричных цифры). \uhhhh Символ с кодом hh (4 шестнадцатиричных цифры).
74
|
Шаровик затейник
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
|
|
14.03.2011, 12:39 | 3 |
Классы пространства имен System.Text.RegularExpressions
Capture - Представляет результаты из отдельной записи части выраже- ния. Capture представляет одну подстроку для отдельной успешной записи. CaptureCollection - Представляет последовательность подстрок записи. CaptureCollection возвращает набор записей, сделанных одной группой записи. Group - Group представляет результаты отдельной группы записи. Группа записи может записать ноль, одну или более строк в одно совпадение из-за кванторов, таким образом Group предоставляет коллекцию объектов Capture. GroupCollection - Представляет коллекцию групп записи. GroupCollection возвращает набор групп записи в одном совпадении. Match - Представляет результаты из отдельного совпадения регулярного выражения. MatchCollection - Представляет набор успешных совпадений, обнаруженных путем итеративного применения шаблона регулярного выражения к входной строке. Regex - Представляет постоянное регулярное выражение. RegexCompilationInfo - Представляет сведения о регулярном выражении, используемые для компиляции регулярного выражения в отдельную сборку. RegexRunner - Класс RegexRunner является базовым классом для скомпилированных регулярных выражений. RegexRunnerFactory - Создает класс RegexRunner для скомпилированного регулярного выражения.
32
|
89 / 60 / 2
Регистрация: 08.03.2011
Сообщений: 546
|
|
30.01.2012, 11:55 | 4 |
Вот еще 2 сайта для тестирования регулярок, а также разнообразные шаблоны
http://gskinner.com/RegExr/ http://regexlib.com/(A(Wcv_JS2... eSupport=1 А также табличка
25
|
38 / 41 / 0
Регистрация: 23.01.2013
Сообщений: 17
|
|
23.01.2013, 14:56 | 5 |
Посмотрел первую и вторую ссылку для проверки регулярных выражений. Обе не понравились.
Потратил драгоценное время и накидал маленькую програмку для проверки регулярных выражений. Прикладываю вместе с исходниками кому надо. PS Програмка на C# так что все выражения что в ней работают, работают в C#
31
|
23.01.2013, 14:56 | |
23.01.2013, 14:56 | |
Помогаю со студенческими работами здесь
5
Регулярные выражения Регулярные выражения - C# Регулярные выражения Регулярные выражения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |