PHP/Javascript RegExp-非捕获组

PHP/Javascript RegExp-非捕获组,regex,Regex,我有三种不同的字符串: 1. view=(edit:29,30) 2. view=(edit:29,30;) 3. view=(edit:29,30;x:100;y:200) 我需要一个RegExp: 最多可捕获“30”,包括“30” 捕获“x:100;y:200”-只要第一次匹配后有分号 不会在任何组中包含最左边的分号 第一个分号右侧直至“')的整个字符串可以/应该在同一组中 我想到了: $pat = '/view=\((\w+)(:)([\d,]+)((;[^)]+){0,}|;)\)/'

我有三种不同的字符串:

1. view=(edit:29,30)
2. view=(edit:29,30;)
3. view=(edit:29,30;x:100;y:200)
我需要一个RegExp:

  • 最多可捕获“30”,包括“30”
  • 捕获“x:100;y:200”-只要第一次匹配后有分号
  • 不会在任何组中包含最左边的分号
  • 第一个分号右侧直至“')的整个字符串可以/应该在同一组中
  • 我想到了:

    $pat = '/view=\((\w+)(:)([\d,]+)((;[^)]+){0,}|;)\)/';
    
    应用于“视图=(编辑:29,30;x:100;y:200)”,它产生:

    Array
    (
        [0] => view=(edit:29,30;x:100;y:200)
        [1] => edit
        [2] => :
        [3] => 29,30
        [4] => ;x:100;y:200
        [5] => ;x:100;y:200
    )
    
    问题。如何删除“;”来自匹配项[4]和[5]

    重要。当不存在分号时,相同的RegExp应该用于字符串,如:“view=(edit:29,30)”


    谢谢

    您不需要将所有内容分组。请尝试以下正则表达式:

    /view=\((\w+):([\d,]+)(?:;([^)]+)?)?\)/
    

    你不需要把每件事都分组。请尝试以下正则表达式:

    /view=\((\w+):([\d,]+)(?:;([^)]+)?)?\)/
    

    我猜你想要这样的东西:

    $pattern = '/view=\\((\\w+):(\\d+,\\d+)(?:;((?:\\w+:\\d+;?)*))?\\)/';
    
    应该回来

    [0] view=(edit:29,30;x:100;y:200)
    [1] edit
    [2] 29,30
    [3] x:100;y:200
    

    我猜你想要这样的东西:

    $pattern = '/view=\\((\\w+):(\\d+,\\d+)(?:;((?:\\w+:\\d+;?)*))?\\)/';
    
    应该回来

    [0] view=(edit:29,30;x:100;y:200)
    [1] edit
    [2] 29,30
    [3] x:100;y:200