0

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

  1. 不能以“;”结尾或开头
  2. “;” 必须分开
  3. 必须至少有 1 个“;” 但不超过 3 个“;”

示例 1. s;dsdd;sd - 有效 2. sdasd;dasd; - 无效 3. sd;dsd;dasd;dasd; - 无效 4. ;dasd;dasd; - 无效的

4

3 回答 3

3

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

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

这是如何工作的:

^锚定到行首。

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

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

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

;[^;]+匹配文字分号后跟 1 个或多个“非分号”。

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

最后,$锚定到行尾。

于 2012-05-30T04:34:11.183 回答
3

这是你的正则表达式:

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

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

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

这样做的好处是:

  • 正则表达式实际上是“只读”代码,但是如果您将其分解,则有机会稍后再阅读
  • 如果您稍后更改/删除/添加规则,则如果像这样分段,则正则表达式更容易维护

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

于 2012-05-30T04:58:48.800 回答
0

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

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

读为,匹配一个标记,然后是由一个分号分隔的尽可能多的标记。

于 2012-05-30T04:41:31.147 回答