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中
:
由于使用了分支重置分组(?|…|…)
,正则表达式包含两个备选方案,其中两个捕获组的索引为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]);
(?|\['([^']*(?:'(?!])[^']*)*)'\]|'([^'\\]*(?:\\.[^'\\]*)*)')