正则表达式:不能以或以“;”开头,“;”必须分开,必须至少1“;”但不超过“;”

时间:2012-05-30 04:31:51

标签: regex

我可以知道如何创建具有以下规则的正则表达式

  1. 无法结束或以“;”
  2. 开头
  3. “;”必须分开
  4. 必须至少1“;”但不超过3“;”
  5. 实施例 1. s; dsdd; sd - 有效 sdasd; dasd; - 无效 3. sd; dsd; dasd; dasd; - 无效 4.; dasd; dasd; - 无效

3 个答案:

答案 0 :(得分:3)

假设perl兼容,因为你没有指定。

/^[^;]+(?:;[^;]+){1,3}$/

这是如何运作的:

^锚定到该行的开头。

[^;]匹配任何不是“;”的字符

+修饰符至少匹配前一种类型(一种或多种)。

(?: )是一个非捕获分组。在这种情况下,您也可以仅使用()进行捕获分组并不重要。

;[^;]+匹配一个字面分号,后跟一个或多个“非分号”。

{1,3}{m,n}形式的大括号至少需要m但不超过n重复前一个序列(在本例中为(?:;[^;]+)

最后,$锚定到该行的末尾。

答案 1 :(得分:3)

这是你的正则表达式:

^(?!.*;;)(?=(.*;){1,3}.*$)[^;].*[^;]$

此正则表达式为每个标准使用单独的部分:

  • ^输入开始
  • (?!.*;;)声明输入的“负面预测”不包含;;任何地方
  • (?=(.*;){1,3})断言输入确实包含1-3个;字符
  • [^;].*[^;]以非;字符
  • 开头和结尾
  • $输入结束

这样做的好处是:

  • 正则表达式实际上是“只读”代码,但是如果你将其分解,你有可能在以后阅读它
  • 如果您稍后更改/删除/添加规则,如果按此分段,则正则表达式更易于维护

有关“环顾四周”和其他高级正则表达式概念的说明,请参阅this site

答案 2 :(得分:0)

如果您指定要匹配的内容而不是您不想匹配的内容,则可能最简单。如果你的分号之间的东西应该包含大写和小写字母和数字,那么下面就足够了:

/[A-Za-z0-9](;[A-Za-z0-9])*/

读取,匹配一个令牌,然后是先用一个分号分割的多个令牌。