Regex требуется группа дополнительных элементов [duplicate]

Строка ошибки «Ссылка на объект, не установленная на экземпляр объекта.» указывает, что вы не назначили экземпляр объекта объектной ссылке, и все же вы получаете доступ к свойствам / методам этого объекта.

например: скажем, у вас есть класс под названием myClass и он содержит одно свойство prop1.

public Class myClass
{
   public int prop1 {get;set;}
}

Теперь вы получаете доступ к этому prop1 в каком-то другом классе, как показано ниже:

public class Demo
{
     public void testMethod()
     {
        myClass ref = null;
        ref.prop1 = 1;  //This line throws error
     }
}

выше строки выдает ошибку, потому что ссылка класса myClass объявлена, но не создана, или экземпляр объекта не назначается referecne этого класса.

Чтобы исправить это, вам нужно создать экземпляр (присвоить объект ссылке на этот класс).

public class Demo
{
     public void testMethod()
     {
        myClass ref = null;
        ref = new myClass();
        ref.prop1 = 1;  
     }
}
1
задан Alan Mendelevich 10 May 2010 в 15:09
поделиться

4 ответа

Чтобы сделать это с помощью чистого регулярного выражения, вам придется развернуть его во все свои возможности:

ab?c?|a?bc?|a?b?c

Если у вас есть взгляды, вы можете убедиться, что строка не пуста. Или вы можете проверить, что строка имеет длину, по крайней мере, одного, прежде чем передать ее в выражение, в зависимости от вашего выбора языка.

Например, вид .NET выглядит следующим образом:

^(?=[abc])a?b?c?$

Или вы можете просто проверить длину строки перед ее соответствием:

if (YourString.Length == 1) {
   // matching code goes here, using the expression a?b?c?
}
2
ответ дан Welbog 31 August 2018 в 22:32
поделиться

Нет смысла пытаться упаковать всю функциональность всех проблем, которые вы когда-либо имели, в одно регулярное выражение. Лучшее решение - написать очевидное регулярное выражение и добавить проверку на нулевую длину. Вы должны получить дополнительные умения с регулярными выражениями, когда вам это абсолютно необходимо - например, если вам нужно взаимодействовать с неизменяемым API, который принимает только одно регулярное выражение и не более того.

0
ответ дан Kilian Foth 31 August 2018 в 22:32
поделиться

Вы можете записать все перестановки (что является болью) или все возможности, из которых письмо не осталось (ab?c?|a?bc?|a?b?c), что несколько меньше боли.

0
ответ дан sepp2k 31 August 2018 в 22:32
поделиться
^(?=.)a?b?c?$

Это проверит, есть ли хотя бы один символ с lookahead и будет соответствовать вашему регулярному выражению.

4
ответ дан Thexa4 31 August 2018 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: