2012-04-02 6 views
-1

В моей тестовой строке содержатся новые строки.Regex, чтобы проверить, нет ли слова

Test<?TEST. 
sdasdsadads 
Test<?TEST. 

Test<?TEST. 

Я хочу, чтобы проверить, если комбинация <? существует в любом месте текста. Если это так, мое регулярное выражение должно потерпеть неудачу.

Любые идеи?

веб-страницы ASP.NET \

<td> 
          <asp:TextBox ID="test" runat="server" Height="55px" TextMode="MultiLine"></asp:TextBox> 
          <asp:RegularExpressionValidator ID="RegularExpressionValidator11" runat="server" 
           ControlToValidate="test" Display="Dynamic" ForeColor="Red" 
           ValidationGroup="Validations" ValidationExpression="^(?![\s\S]*<\?)" EnableClientScript="true"></asp:RegularExpressionValidator> 
         </td> 
+0

вы можете уточнить этот вопрос и может быть дать несколько примеров? –

+0

Должно ли оно быть чувствительным к регистру или нет? –

+0

Вы проверили [документ Apple] (http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html)? –

ответ

1

Это то, что отрицательные утверждения являются для касательно последующего:.

^(?!.*<\?) 

матчей только если <? не происходит в любом месте строки. Возможно, вы захотите добавить (?s) в начале, если ваш текст может содержать символы новой строки.

+0

извините, пожалуйста, ознакомьтесь с приведенным выше кодом. I обновил его. – sqlnewbie

+0

Когда текст содержит символы новой строки, как формировать регулярное выражение ?, усталое добавление? S в начале, но не работает на веб-странице ASP.NET. – sqlnewbie

+0

@sqlnewbie: Это '(? S)' , а не '? s'. И если ваш механизм регулярных выражений на самом деле является JavaScript вместо .NET (который есть, когда вы выполняете сопоставление на стороне клиента), то это не работает. Вместо этого используйте регулярное выражение '^ (?! [\ S \ S] * <\?'. –

1

Вам не нужно использовать регулярное выражение для поиска определенного слова. Вместо этого просто выполните обычную подстроку для этого конкретного слова.

В Python, это будет выглядеть так:

def string_contains_test (text): 
    lowercase_text = text.lower() 
    if 'test' in lowercase_text: 
     return True 
    else: 
     return False 

text_1 = "Lorem ipsum dolor sit amur...." 
text_2 = "This is a test." 

string_contains_test (text_1) # False. 
string_contains_test (text_2) # True. 

Заметим, что случай складывания (преобразование строки в верхний или нижний регистр) является злом, когда делается в строку Unicode. Не делай этого.

1

Нравится?

!Regex.IsMatch(testString, Regex.Escape("<?")) 

Или еще проще:

!testString.Contains("<?") 

Использование только регулярное выражение (это будет работать для переноса строк и):

^(?![\s\S]*<\?) 
+0

Я пробовал, но не работал Akzen, с новыми строками, мог бы проверить его? – sqlnewbie

+0

Я протестировал его с помощью этого .net regex тестер: http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx – aKzenT

+0

Можете ли вы проверить свой тестовый ввод со ссылкой выше?он должен использовать тот же механизм Regex, что и инфраструктура .net. Возможно, вы можете опубликовать некоторый код с веб-страницы ASP.net, где вы используете регулярное выражение, чтобы увидеть, заметили ли мы ошибку. – aKzenT

Смежные вопросы