Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярные выражения 
:(
    Опции темы
Loncaster
Дата 3.11.2006, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 8.8.2006

Репутация: нет
Всего: нет



Вообщем возникло у меня несколько вопросов по регуляркам...

1) Допустим у меня есть такая регулярка : "счета <b>[0-9]{1,3}</b>". Как видите в ней есть русские буквы? Оно будет работать, если в регулярке есть русские буквы? 

2) Возьмем пример:

Код

 Regex exp = new Regex( @"<b>(.*)</b>",
    RegexOptions.IgnoreCase);
   string InputText =this.data;
   MatchCollection MatchList = exp.Matches(InputText);
   Match FirstMatch = MatchList[0];


Как Мне получить доступ к найденному (.*) ? Т.е. в пхп например было бы так $MatchList[0][1] и т.д..
пробовал MatchList[0,1] но оно принимает только 1 индекс...

3) Как правильно экранировать кавычки в регулярках сишарпа?

--------------------
Ще не вмерла Україна...
PM MAIL   Вверх
archimed7592
Дата 3.11.2006, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 7
Всего: 93



1) да
2) String FirstString = InputText.SubString (FirstMatch.Index, FirstMatch.Length)
3) Regex exp = new Regex ("\\\"(.*)\\\"", RegexOptions.IgnoreCase)
Regular Expression Classes

Это сообщение отредактировал(а) archimed7592 - 3.11.2006, 22:38


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Loncaster
Дата 3.11.2006, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 8.8.2006

Репутация: нет
Всего: нет



У Меня когда в регулярке есть слово "счету" то не работает она...у меня результат поиска выводитса в месседжбоксе, так вот когда есть слово "счету" то выводится куча знаков вопроса...а когда убираю слово - то все работает...и выводится но не совсем то естесевенно что мне нужно...
--------------------
Ще не вмерла Україна...
PM MAIL   Вверх
archimed7592
Дата 3.11.2006, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 7
Всего: 93



Код
using System;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        public static void Main(string[] args)
        {
            String text = "добали к счету    \"расчётный счет \" N денег";
            Console.WriteLine (text);
            Regex exp = new Regex("счету\\s+\\\"(.*)\\\"", RegexOptions.IgnoreCase);
            MatchCollection matches = exp.Matches(text);
            foreach (Match match in matches)
                Console.WriteLine(text.Substring(match.Index, match.Length));
        }
    }
}

Код
добали к счету    "расчётный счет " N денег
счету    "расчётный счет "


Добавлено @ 23:12 
Цитата(Loncaster @  3.11.2006,  23:16 Найти цитируемый пост)
string InputText =this.data;
откуда берется this.data? небось из файла считывается? скажем так, попробуй вывести InputText...если там будет куча знаков вопросов, то сам понимаешь, что pcre здесь не при чём...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
mr.DUDA
Дата 3.11.2006, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



2) проще всего использовать именованные captures, т.е.:
Код
using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        Regex r = new Regex(@"(?<protocol>\w+)://(?<uri>.+)*");

        string[] urls = 
        {
            "http://forum.vingrad.ru/index.php?showtopic=119690",
            "http://yabbadabbadoo/cool/bla-bla-bla?some&more",
            "ftp://bla-bla-bla/argh/some.txt",
            "nntp://"
        };

        foreach (string url in urls)
        {
            Console.WriteLine("URL: " + url);

            Match m = r.Match(url);
            if (m.Success)
            {
                Group g_protocol = m.Groups["protocol"];
                Group g_uri = m.Groups["uri"];

                if (g_protocol.Success)
                    Console.WriteLine("  protocol   : " + g_protocol.Value);
                if (g_uri.Success)
                    Console.WriteLine("  uri        : " + g_uri.Value);
            }
        }
    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
Loncaster
Дата 3.11.2006, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 8.8.2006

Репутация: нет
Всего: нет



в InputText считывается содержимое веб-странички...вывел его, все ок. А все-равно знаки вопроса ((
--------------------
Ще не вмерла Україна...
PM MAIL   Вверх
mr.DUDA
Дата 3.11.2006, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Loncaster @  3.11.2006,  22:30 Найти цитируемый пост)
в InputText считывается содержимое веб-странички...вывел его, все ок. А все-равно знаки вопроса ((

Возможно, дело в неправильно выбранной кодировке. Можно проверить для начала, что находится в this.data - там тоже могут быть знаки вопроса.


--------------------
user posted image
PM MAIL WWW   Вверх
Loncaster
Дата 3.11.2006, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 8.8.2006

Репутация: нет
Всего: нет



Хс...что-то таки не так...когда вывожу код страницы в месседжбох то там например есть такой фрагмент "<title>Blablabla -</title>" а должно быть "<title>Blablabla - тут текст на русском</title>" , 
т.е. оно тупо не замечает русских символов и не выводит их...соответсвенно и не находит ничего с русскими регулярками....а вот как это обойти?...
--------------------
Ще не вмерла Україна...
PM MAIL   Вверх
mr.DUDA
Дата 3.11.2006, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Loncaster @  3.11.2006,  22:45 Найти цитируемый пост)
Хс...что-то таки не так...когда вывожу код страницы в месседжбох то там например есть такой фрагмент "<title>Blablabla -</title>" а должно быть "<title>Blablabla - тут текст на русском</title>" , 

Такая же фигня будет если вывести, к примеру, в ListBox. Это значит что текст не в юникодовской кодировке.

Цитата(Loncaster @  3.11.2006,  22:45 Найти цитируемый пост)
т.е. оно тупо не замечает русских символов и не выводит их...соответсвенно и не находит ничего с русскими регулярками....а вот как это обойти?...

Когда читаешь страницу в стринг, выбирай правильную кодировку (Endoding.GetEncoding(1251) и т.д. по аналогии)


--------------------
user posted image
PM MAIL WWW   Вверх
archimed7592
Дата 3.11.2006, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 7
Всего: 93



Цитата(Loncaster @  4.11.2006,  00:30 Найти цитируемый пост)
вывел его, все ок.
показывай как выводил...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.