2009-10-09 5 views
3

Я создал CLR в базе данных SQL Server 2005. Это простая пользовательская функция регулярного выражения, которая проверяет, существует ли шаблон в строке, которую я передаю в функцию.игнорировать регистр с регулярным выражением

Чистый код дота я использую в CLR показан ниже:

Return System.Text.RegularExpressions.Regex.IsMatch("Input", "pattern") 

Это возвращает значение бита 1, если найдено совпадение.

Узор я использую

+(Create|Alter) +(Proc|Procedure) + 

То, что я хочу, чтобы это сделать, это найти какие-либо случаи «процедуры«создать или изменить»или прок» независимо от случая. Как я могу заставить выражение игнорировать регистр?

Я попытался

/ +(Create|Alter) +(Proc|Procedure) +/i 

, но это не работает.

EDIT: Я просмотрел в Интернете и использовал различные предложения. Ни один из них не работал, или я сделал это неправильно. Если кто-то может дать мне образец, который проигнорирует случай, который будет высоко оценен!

То, что я пытался достичь, было регулярным выражением, которое игнорирует случай. Dot Net имеет параметры, которые могут быть переданы, чтобы установить игнорировать регистр, однако он находится в CLR, поэтому я не могу передать параметры функции.

Узор, который достигает этого: + (Создать | Alter) + (Proc | Порядок) +

ответ

3

Вы можете использовать встроенный "нечувствительны к регистру" модификатор (?i) (я?):

 
(?i) +(Create|Alter) +(Proc|Procedure) + 
+0

ли это пространство между (? Я) и + сделать его для пространство? – Greg

+1

Это пространство было частью оригинального рисунка - поэтому я оставил его нетронутым. – Tomalak

+0

Это именно то, что я искал спасибо! Протестировано и работает! Пространство и + означает, что перед Create или Alter может быть любое количество пробелов. – MarcoF

2

Попробуйте использовать:

Regex regex = new Regex(
    regexStringHere, 
    RegexOptions.IgnoreCase); 

return regex.IsMatch(inputStringHere); 

Надеется, что это помогает.

3

попробуйте это.

Return System.Text.RegularExpressions.Regex.IsMatch("input", @".*(Create|Alter).+(Proc|Procedure).+", RegexOptions.IgnoreCase); 

Я рекомендую устанавливать свободное программное обеспечение Expresso, чтобы проверить ваши регулярные выражения и генерировать .Net/C# код для поиска, замены и т.д.

+2

+1 Экспресс-это здорово. – JCasso

+0

@ jcasso: Не уверен, что ваша оценка за независимую сторону оправдывает голосование. ;-) – Tomalak

+0

@Tomalak: У вопросника возникает проблема с созданием регулярного выражения. Если бы он использовал Expresso, он заметил бы, что есть опция «IgnoreCase». Разве это не означает, что это полезно? – JCasso