2010-05-19 2 views
4

Мне нужно преобразовать Perl-скрипт в VB.NET. Мне удалось почти все преобразование, но некоторое Perl (казалось бы, простое) регулярное выражение вызывает головную боль. Может кто-то мне предложить .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, но иногда понимает регулярное выражение langugae, и мне нужно быстро завершить преобразование.

+1

Что означают эти регулярные выражения делать? Не все узнали Perl, но они могут знать регулярное выражение .net. – kennytm

+0

Ну, вот что я пытаюсь выяснить. Если какой-то парень Perl может объяснить простым английским языком, что делает это регулярное выражение, я бы смог преобразовать их в .NET !!! –

+0

Я думаю, что это проблема для OP. :) – pdbartlett

ответ

3

В 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

Привет, Даниэль, вы имеете в виду, что первая часть представляет собой шаблон подстановки (s/text //), а вторая часть - обычный поиск регулярных выражений? –

+0

да точно, только что отредактировал мой ответ, чтобы отразить это :) –

+0

Спасибо, Daniel, не могли бы вы также прокомментировать это: if ($ letter = ~ m/$ first_char/i) –

0
$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 супер хорошо регулярное выражение :)