Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Используйте Regex Subtraction
[\p{P}-[._]]
Вот ссылка на документацию .NET Regex (я не уверен, что другие разновидности поддерживают это) ... http://msdn.microsoft.com /en-us/library/ms994330.aspx
Вот пример C #
string pattern = @"[\p{P}\p{S}-[._]]"; // added \p{S} to get ^,~ and ` (among others)
string test = @"_""'a:;%^&*~`bc!@#.,?";
MatchCollection mx = Regex.Matches(test, pattern);
foreach (Match m in mx)
{
Console.WriteLine("{0}: {1} {2}", m.Value, m.Index, m.Length);
}
Объяснение Шаблон - вычитание класса символов. Он начинается со стандартного класса символов, например [\ p {P}], а затем добавляет класс символов вычитания, например - [._], который говорит, что нужно удалить. а также _. Вычитание помещается внутри [] после стандартного класса кишок.
Ответы пока не относятся ко ВСЕМ пунктуации. Это должно сработать:
(?![\._])\p{P}
(Пояснение: Отрицательный прогноз, чтобы убедиться, что ни .
, ни _
не сопоставлено, а затем совпадает с любым символом пунктуации Юникода.)
Вот кое-что немного проще. Не слова или пробел (где слова включают A-Za-z0-9 и подчеркивание).
[^\w\s.]