我可以知道如何创建具有以下规则的正则表达式
- 不能以“;”结尾或开头
- “;” 必须分开
- 必须至少有 1 个“;” 但不超过 3 个“;”
示例 1. s;dsdd;sd - 有效 2. sdasd;dasd; - 无效 3. sd;dsd;dasd;dasd; - 无效 4. ;dasd;dasd; - 无效的
我可以知道如何创建具有以下规则的正则表达式
示例 1. s;dsdd;sd - 有效 2. sdasd;dasd; - 无效 3. sd;dsd;dasd;dasd; - 无效 4. ;dasd;dasd; - 无效的
假设 perl 兼容,因为您没有指定。
/^[^;]+(?:;[^;]+){1,3}$/
这是如何工作的:
^
锚定到行首。
[^;]
匹配任何不是“;”的字符
+
修饰符匹配至少一个先前类型(一个或多个)。
(?: )
是非捕获分组。在这种情况下,您也可以仅()
用于捕获分组,这并不重要。
;[^;]+
匹配文字分号后跟 1 个或多个“非分号”。
{1,3}
. 表单中的大括号{m,n}
至少需要m
但不超过n
前一个序列的重复(在本例中为(?:;[^;]+)
)
最后,$
锚定到行尾。
这是你的正则表达式:
^(?!.*;;)(?=(.*;){1,3}.*$)[^;].*[^;]$
此正则表达式为每个条件使用单独的部分:
^
输入开始(?!.*;;)
;;
断言输入不包含任何地方的“负面展望”(?=(.*;){1,3})
断言输入的“积极展望”确实包含 1-3 个;
字符[^;].*[^;]
;
以非字符开头和结尾$
输入结束这样做的好处是:
有关“环顾四周”和其他高级正则表达式概念的说明,请参阅此站点
如果您指定要匹配的内容而不是不想匹配的内容,则可能最简单。如果分号之间的内容应该包含大小写字母和数字,那么以下内容就足够了:
/[A-Za-z0-9](;[A-Za-z0-9])*/
读为,匹配一个标记,然后是由一个分号分隔的尽可能多的标记。