我可以知道如何创建具有以下规则的正则表达式
实施例 1. s; dsdd; sd - 有效 sdasd; dasd; - 无效 3. sd; dsd; dasd; dasd; - 无效 4.; dasd; dasd; - 无效
答案 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])*/
读取,匹配一个令牌,然后是先用一个分号分割的多个令牌。