php正则表达式方括号和逗号

php正则表达式方括号和逗号,php,regex,preg-match-all,Php,Regex,Preg Match All,我想捕获方括号内的文本和下面字符串中的逗号 $_['text_1'] = 'text_2 %d to %d of %d (%d text)'; 我有一个方括号的正则表达式 preg_match_all("/\[[^\]]*\]/",$string,$matches); //all strings with brackets 但是需要两个正则表达式 正文1 文本\u 2%d到%d,共%d个(%d个文本) 您的“/\[^\]]*\]/”只匹配子字符串,如[...] 您可以使用 (?|\

我想捕获方括号内的文本和下面字符串中的逗号

$_['text_1']      = 'text_2 %d to %d of %d (%d text)';
我有一个方括号的正则表达式

preg_match_all("/\[[^\]]*\]/",$string,$matches); //all strings with brackets
但是需要两个正则表达式

  • 正文1
  • 文本\u 2%d到%d,共%d个(%d个文本)
  • 您的
    “/\[^\]]*\]/”
    只匹配子字符串,如
    [...]

    您可以使用

    (?|\['([^][]*)']|'([^'\\]*(?:\\.[^'\\]*)*)')
    
    请参阅,您的值将在组1中

    :

    由于使用了分支重置分组
    (?|…|…)
    ,正则表达式包含两个备选方案,其中两个捕获组的索引为1。这两个备选方案匹配:

    • \['([^][]*)']
      -一个文本
      ['
      ,后跟0个或更多字符,而不是
      ]
      [
      直到
      ']
    • '([^'\]*(?:\.[^'\]*)*)
      -单引号内可能包含任何转义序列的任何子字符串
    或者更安全的方法,也可以允许第一组中的任何
    [
    ]
    (即,如果您有
    $\u['p[O]ST']
    ,尽管我想这不太可能):


    请参见

    您的示例使用括号而不是方括号,这可能解释了为什么它不能按预期工作逗号在哪里?如果您的“逗号”是总是用括号括起来,字符串中没有转义的
    。谢谢您,先生。我用您的正则表达式和substr substr($matches[0][0],2,-2)获得了所需的所有值;不知道为什么要访问第0个元素,您只需要第1个。
    $re = "/(?|\\['([^][]*)']|'([^'\\\\]*(?:\\\\.[^'\\\\])*)')/"; 
    $str = "\$_['text_1']      = 'text_2 %d to %d of %d (%d text)';"; 
    preg_match_all($re, $str, $matches);
    print_r($matches[1]);
    
    (?|\['([^']*(?:'(?!])[^']*)*)'\]|'([^'\\]*(?:\\.[^'\\]*)*)')