【问题标题】:Regular expression: Numeric + alphanum + special characters Only正则表达式:仅数字 + 字母数字 + 特殊字符
【发布时间】:2013-10-29 22:41:25
【问题描述】:

我正在尝试构建一个正则表达式,它可以找到必须在特殊字符旁边同时包含数字和字母数字值的模式。 我找到了一个处理这种类型的正则表达式但没有特殊字符的答案。

如何在正则表达式中包含特殊字符,包括:^$=()_"'[\@

^([0-9]+[a-zA-Z]+|[a-zA-Z]+[0-9]+)[0-9a-zA-Z]*$

你能解释一下吗?

正则表达式测试器:http://regexlib.com/RETester.aspx

谢谢。

作为一个解决方案,我找到了这个正则表达式:^(?=.*\d)(?=.*[a-zA-Z]).{4,8}$

也许它可以帮助你。

【问题讨论】:

  • 定义special characters
  • 如果用特殊字符表示非单词字符(单词字符是字母、数字和下划线),您可以在表达式中使用\W 标志。
  • 特殊字符:-,_;/[]#@

标签: c++ regex


【解决方案1】:

为什么这么复杂!?

enum { numeric = 1; alpha = 2, special = 4; }

bool check(const std::string& s) {
   for(std::string::size_type i = 0; i < s.size; ++i) {
      if(is_numeric(s[i])) result |= numeric;
      if(is_alpha(s[i])) result |= alpha;
      if(is_special(s[i])) result |= special;
      if(result == numeric | alpha | special) 
         return true;
   }
   return false;
}

打字多一点,但脑损伤少

【讨论】:

  • 是的,实际上是脑损伤。下次我会用硬核的方式来做。谢谢@Dieter,我将使用此代码更容易
  • 这非常易读,但不幸的是与正则表达式解决方案相比非常慢(当然使用适当的正则表达式引擎)。
  • 您也许可以通过使用contains 类型的方法来优化它,而不是显式地循环字符串。虽然每个 contains 可能会自行循环,但它们可能会进行一些优化和提前退出,在好的情况下这将为您节省大量时间。
【解决方案2】:

您的正则表达式由两部分组成,两者都必须捕获一个完整的行,因为它们位于行首 (^) 和行尾 ($) 之间:

  1. ([0-9]+[a-zA-Z]+|[a-zA-Z]+[0-9]+) 这是由两个正则表达式 or'd (|) 一起组成的。第一个正则表达式是一个或多个数字 ([0-9]+),后跟一个或多个字母 ([a-zA-Z]+)。此正则表达式与相反大小写的正则表达式进行或运算:一个或多个字母后跟一个或多个数字。
  2. 第二组表示上面后面跟着一个正则表达式零个或多个字母或数字 ([0-9a-zA-Z]*)

【讨论】:

  • 哦,好的,现在好多了,所以如果我必须包含特殊字符,它必须在 1。开始 2。 2组之间 3。结束
猜你喜欢
  • 1970-01-01
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
相关资源
最近更新 更多