使用正则表达式在正则表达式中查找正则表达式点

时间:2014-07-01 08:11:43

标签: asp.net regex

在asp.net应用程序中,我需要根据可配置的正则表达式验证用户输入。我在db中有一个这样的正则表达式列表,它是用户可配置的,而不是固定的。 我的问题是,在这些正则表达式中,点的意图不是匹配任何字符,而是任何“合理的”字符(在该上下文中是合理的:字母,数字和其他一些ascii字符)。因此,验证过程分两步进行

  1. 检查列表中的reg exp
  2. 使用^[\w.+/-]*$
  3. 等内容检查“合理”字符

    我想使用单个正则表达式,以便我可以将它放在页面上的单个regexp验证器中 - 这样可以提供更好的用户体验。我可以在正则表达式中搜索点并用我更严格的字符类[\w.+/-]替换。 但并非所有的点在正则表达式中具有相同的含义。

    所以我的问题是:在regexp中有一种经过验证的方法可以找到点,但只有在用作角色类时?可能是正则表达式?

1 个答案:

答案 0 :(得分:2)

只是为了进入同一页面,在a.b[.]\.\[.\[\]中,应找到两个点:ab之间,以及转义大括号之间的最后一个点。其他是字面时期。

幸运的是,ASP.NET不知道\Q\E来逃避模式片段。

您可以使用此正则表达式:

(?<!\\)\.(?!(?:\\\[\]\[]|[^][])*(?<!\\)\])

the demo上,观察只有正确的点匹配。

解释

  • lookbehind (?<!\\)确保我们前面没有转义反斜杠
  • \.与我们想要的点匹配
  • 否定前瞻(?!(?:\\\[\]\[]|[^][])*(?<!\\)\])确保我们不会被...
  • 跟踪
  • (?:\\\[\]\[]|[^][])*任意数量的\[\], or non []`字符,然后
  • 没有反斜杠的结束括号:(?<!\\)\]

<强>参考