.NET эквивалентно регулярным выражениям Perl - PullRequest
4 голосов
/ 19 мая 2010

Мне нужно конвертировать Perl-скрипт в VB.NET.Я справился почти со всем преобразованием, но некоторые регулярные выражения Perl (кажущиеся простыми) вызывают головную боль.Может кто-нибудь предложить мне .NET эквивалент следующего регулярного выражения Perl:

1)

$letter =~ s/Users //,;
$letter =~ s/Mailboxes //,;
if($letter =~ m/$first_char/i){

2)

unless($storegroup =~ /Recovery/ || $storegroup =~ /Users U V W X Y Z/ || $storegroup =~ /Users S T/
    || $storegroup =~ /Users Q R/){

Регулярное выражение выглядит для меня простым.Я пытался пробраться через perl.org, но понимание языка регулярных выражений занимает некоторое время, и мне нужно быстро завершить преобразование.

Ответы [ 2 ]

3 голосов
/ 19 мая 2010

В Perl вы можете рассматривать косые черты как что-то вроде двойных кавычек с добавленным значением «между этими косыми чертами есть строка регулярного выражения». Первый блок кода - это регулярное выражение поиска / замены Perl:

$stringvar =~ s/findregex/replaceregex/;

Принимает findregex и заменяет его на replaceregex на месте. Данный пример представляет собой очень простой поиск, и класс .net Regex будет излишним. String.Replace() метод сделает работу:

letter = letter.Replace("Users ", "")
letter = letter.Replace("Mailboxes ", "")

Вторая часть - это Perl только для поиска, возвращает true, если строка findregex найдена, оставляет фактическую строку без изменений.

$stringvar =~ /findregex/;

String.Contains() может справиться с этим в .net:

if (!(storegroup.Contains("Recovery") _
   or storegroup.Contains("Users U V W X Y Z") _
   or storegroup.Contains("you get the idea"))) Then 
    ...

(извините, если мой VB немного ржавый, но надеюсь, это поможет)

0 голосов
/ 19 мая 2010
$letter =~ s/Users //,;
$letter =~ s/Mailboxes //,;
if($letter =~ m/$first_char/i){

->

letter = letter.Replace("Users ", "");
letter = letter.Replace("Mailboxes ", "");
//next one depends on what $first_char is

и

unless($storegroup =~ /Recovery/ || $storegroup =~ /Users U V W X Y Z/ || $storegroup =~ /Users S T/
|| $storegroup =~ /Users Q R/){

->

if (!(storegroup.Contains("Recovery") || storegroup.Contains("Users U V W X Y Z") ...and so on...))

Единственная причина для использования регулярных выражений здесь в том, что Perl очень хорош в регулярных выражениях :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...