Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 以下字符串的正则表达式_Regex - Fatal编程技术网

Regex 以下字符串的正则表达式

Regex 以下字符串的正则表达式,regex,Regex,我正在尝试使用以下规则为ID创建正则表达式: 以A-Z开头,一次或多次。(主ID,mi) 后面跟着可选的破折号。(分隔符) 后跟0-9,一次或多次。(子ID,si) 后跟可选的破折号或点。(分隔符) 后跟可选的a-z或0-9,一次或多次。(主要类别,mc) 后跟可选的破折号或点。(分隔符) 后跟可选的a-z或0-9,一次或多次。(副类别,sc) 如果ID是字母和数字交替的(A-01a1,A1.A.1),则可以省略分隔符。如果后续部分同时为字母或数字(A-1.1a、A1.2.3、A1a.A),则需

我正在尝试使用以下规则为ID创建正则表达式:

  • 以A-Z开头,一次或多次。(主ID,mi)
  • 后面跟着可选的破折号。(分隔符)
  • 后跟0-9,一次或多次。(子ID,si)
  • 后跟可选的破折号或点。(分隔符)
  • 后跟可选的a-z或0-9,一次或多次。(主要类别,mc)
  • 后跟可选的破折号或点。(分隔符)
  • 后跟可选的a-z或0-9,一次或多次。(副类别,sc)
  • 如果ID是字母和数字交替的(A-01a1,A1.A.1),则可以省略分隔符。如果后续部分同时为字母或数字(A-1.1a、A1.2.3、A1a.A),则需要分隔符

    以下是我所拥有的:

    (?P<mi>[A-Z]+)-?(?P<si>[0-9]+)[\-\.]?(?P<mc>[a-z0-9])*[\-\.]?(?P<sc>[a-z0-9])*
    
    (?P[A-Z]+)-?(?P[0-9]+)[\-\.](?P[A-z0-9])*[\-\.]?(?P[A-z0-9])*
    
    以下是我尝试的结果:

    ID      mi  si  mc  sc
    A1      A   1
    A001    A   001
    AB-01   AB  01
    A1aa    A   1   a      <<<<< mc=aa
    A-01a1  A   01  1      <<<<< mc=a sc=1
    A-1.1a  A   1   a      <<<<< mc=1 sc=a
    A1.a1   A   1   1      <<<<< mc=a sc=1
    A1.a.1  A   1   a   1
    A1.2.3  A   1   2   3
    A1a.a   A   1   a   a
    
    ID mi si mc sc
    A1 A 1
    A001 A 001
    AB-01 AB-01
    
    A1aa a1a表达式中的
    *
    应重新定位到捕获组的内部

    还可以删除字符大小写内的斜杠

    (?P<mi>[A-Z]+)-?(?P<si>[0-9]+)[\-\.]?(?P<mc>[a-z0-9])*[\-\.]?(?P<sc>[a-z0-9])*
                                   ^ ^                   ^ ^ ^                   ^ 
    
    (?P[A-Z]+)-?(?P[0-9]+)[\-\.](?P[A-z0-9])*[\-\.]?(?P[A-z0-9])*
    ^ ^                   ^ ^ ^                   ^ 
    
    应该是这样的:

    (?P<mi>[A-Z]+)-?(?P<si>[0-9]+)[-.]?(?P<mc>[a-z0-9]*)[-.]?(?P<sc>[a-z0-9]*)
    
    (?P[A-Z]+)-?(?P[0-9]+)[-.]?(?P[A-z0-9]*)[-.](?P[A-z0-9]*)
    
    我会用这个:

    (?<mi>[A-Z]+)-?(?<si>[0-9]+)[-.]?(?<mc>[a-z0-9]*)[-.]?(?<sc>[a-z0-9]*)
    
    (?[A-Z]+)-(?[0-9]+)[-.](?[A-z0-9]*)[-.](?[A-z0-9]*)
    
    说明
    (?您使用的是哪种语言?不同语言中的Regex工具是不同的(尽管这看起来很像PCRE变体).I just use RegEx101.comIt也想知道。开箱即用的PCRE变体似乎已被选中,但您可以单击左侧边缘使其使用JS或Python方言。显然,它还不支持更多的.PCRE(我猜是默认值)。我不知道它的左边有JS和Python变体。我只是打开该站点进行测试。在A-01a1,A-1-aa1上失败似乎只有在列表中失败,但如果它是自己的,则不会失败。
    A-1-aa1
    aa1
    部分应该是主要类别?在这里我修改了
    (?=[-.\s])
    也测试字符串的结尾,因此现在它们看起来像
    (?=[-.\s]|$)