Regex 正则表达式:不能以“结束”或“开始”&引用&“&引用;必须分开,必须至少1“&引用;但不超过&引用;

Regex 正则表达式:不能以“结束”或“开始”&引用&“&引用;必须分开,必须至少1“&引用;但不超过&引用;,regex,Regex,我可以知道如何创建具有以下规则的正则表达式吗 不能以“;”结束或开始 “;”必须分开 必须至少1“,但不超过3” 范例 1.sdsdd;sd-有效 2.sdasd;dasd;-无效的 3.sd;渠务署;dasd;dasd;-无效的 4.dasd;dasd;-无效假设perl兼容,因为您没有指定 /^[^;]+(?:;[^;]+){1,3}$/ 工作原理: ^锚定到行的开头 [^;]匹配任何不匹配的字符 +修饰符至少与以前的一种类型(一种或多种)匹配 (?:)是一个非捕获分组。您还可以使用()进行

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

  • 不能以“;”结束或开始
  • “;”必须分开
  • 必须至少1“,但不超过3”
  • 范例 1.sdsdd;sd-有效 2.sdasd;dasd;-无效的 3.sd;渠务署;dasd;dasd;-无效的
    4.dasd;dasd;-无效

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

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

    工作原理:

    ^
    锚定到行的开头

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

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

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

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

    {1,3}
    。格式为
    {m,n}
    的大括号将要求至少
    m
    ,但不超过前一序列的
    n
    重复(在这种情况下,
    (?:;[^;]+)


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

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

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

    工作原理:

    ^
    锚定到行的开头

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

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

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

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

    {1,3}
    。格式为
    {m,n}
    的大括号将要求至少
    m
    ,但不超过前一序列的
    n
    重复(在这种情况下,
    (?:;[^;]+)


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

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

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

    读作,匹配一个标记,然后是由一个分号分割的尽可能多的标记

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

    /[A-Za-z0-9](;[A-Za-z0-9])*/
    
    读作,匹配一个标记,然后是由一个分号分割的尽可能多的标记

    这是您的正则表达式:

    ^(?!.*;;)(?=(.*;){1,3}.*$)[^;].*[^;]$
    
    此正则表达式对每个标准使用单独的部分:

    • ^
      开始输入
    • (?!*;)
      断言输入不包含
      ;;的“负面展望”任意位置
    • (?=(.*){1,3})
      断言输入包含1-3
      字符
    • [^;].[^;]
      以非
      开头和结尾字符
    • $
      输入结束
    这样做的好处是:

    • regex实际上是“只读”代码,但如果您将其分解,则有可能在以后阅读它
    • 如果您以后更改/删除/添加规则,如果像这样分段,正则表达式更容易维护
    有关“环顾四周”和其他高级正则表达式概念的解释,请参见您的正则表达式:

    ^(?!.*;;)(?=(.*;){1,3}.*$)[^;].*[^;]$
    
    此正则表达式对每个标准使用单独的部分:

    • ^
      开始输入
    • (?!*;)
      断言输入不包含
      ;;的“负面展望”任意位置
    • (?=(.*){1,3})
      断言输入包含1-3
      字符
    • [^;].[^;]
      以非
      开头和结尾字符
    • $
      输入结束
    这样做的好处是:

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

    有关“环顾四周”和其他高级正则表达式概念的解释,请参见

    为什么正则表达式是解决此问题的唯一合适工具。您最喜欢的编程语言中的几行代码可能比正则表达式更容易理解(尽管正则表达式可能是这几行代码的一部分)。@Adam Michalcin-是的,我可以使用“/”拆分字符串并确保少于4个数组,但我只想尝试一些不同的方法。为什么正则表达式是解决这个问题的唯一合适工具。您最喜欢的编程语言中的几行代码可能比正则表达式更容易理解(尽管正则表达式可能是这几行代码的一部分)。@Adam Michalcin-是的,我可以使用“/”拆分字符串确保数组少于4个,但我只想尝试一些不同的东西。我正在解释:)我会先做解释。在OP唠叨了30分钟后,一次递增地显示一个字符的答案。我还没有机会测试这个,但提前谢谢。只是好奇我如何“接受”答案?投票箭头下有一个复选框,当你投票时,浏览器会提示你接受答案。要接受答案,只需单击复选框。我建议你检查一下你以前的问题,并将其中一些问题标记为已接受答案,这样你会得到更多的帮助。是的,我刚刚做了~谢谢。我将研究您的解决方案,但感谢您为我所做的巨大努力:我正在解释它:)我会做e