正则表达 - 无论被包围的词

时间:2011-04-18 22:37:55

标签: asp.net regex

我正在寻找一个正则表达式,它将匹配文本中的字符串## test ##。字符串可以被任何单词或非单词字符,白色空格或换行符包围 - 所以一切都可以是字符串的左侧和右侧,无论如何。 我需要在用于ValidationExpression的asp.net RegularExpressionValidator控件中使用它。

提前感谢您的帮助! 问候。

<asp:RegularExpressionValidator ID="RegularExpressionValidator9" runat="server" ControlToValidate="TextBox1"
            Display="Dynamic" ValidationGroup="Mail" ErrorMessage="Insert !"
            ValidationExpression="(\w|\s|\n)##test##(\w|\s|\n)" >*</asp:RegularExpressionValidator>
        <asp:Button ID="Button1" runat="server" Text="Button" 
            ValidationGroup="Mail" Onclick="Button1_Click" />

2 个答案:

答案 0 :(得分:3)

这应该这样做:

ValidationExpression="[\s\S]*##test##[\s\S]*"

我可以看到你的正则表达式有三个问题,所有这些问题都需要(\w|\s|\n)部分:

  • 它只匹配一个字符。你需要它来匹配零个或多个字符;添加*量词会做到这一点。

  • 这是不必要的冗余和无偿的低效率。 [\w\s]匹配相同的内容:单词字符(\w)或空白字符(\s,已包含\n)。每当您在使用和替换((a|b|c))或字符类([abc])之间进行选择时,字符类应该始终是您达到的第一个工具。它可能看起来就像一个微不足道的选择,但它会对性能产生巨大影响。

  • 它遗漏了很多字符,最明显的是标点字符,如!+.等。

如果您想知道我使用[\s\S]*而不是.*的原因,那是因为可以在浏览器服务器中执行验证。在JavaScript正则表达式中,与大多数其他版本一样,.元字符与换行符不匹配。大多数其他人也支持“单行”或“点对点全部”模式,但不支持JavaScript。

当然,你可以只强制它在服务器上运行,但是你可能习惯于在可能的情况下将你的正则表达到JavaScript级别。 : - /

答案 1 :(得分:0)

这样的东西?

.*(##test##).*