[英]How to parse a string of function parameters with REGEX in PHP
[英]Regex catching function parameters in php
目前我正在尝试使用regex获取所有函数参数以进行模板化。 函数参数很像PHP compitable。
所以这是需要解析的示例文本:
"test", 'test2', $test3, ?"%A %d %B %Y", "foo,bar,foobar"
这需要解析为:
[
'"test"',
'\'test2\'',
'$test3',
'?"%A %d %B %Y"',
'"foo,bar,foobar"'
]
我找到了这种模式但是。 当它在双引号之间有逗号(,)时,它也会分割它们。
'~([^,]+\(.+?\))|([^,]+)~x'
这种模式的结果是:
[
'"test"',
' \'test2\'',
' $test3',
' ?"%A %d %B %Y"',
' "foo,',
'bar,',
'foobar"'
]
我对正则表达式模式不是很了解。 我可以用它来实现基本的东西,但我找不到实现这个目标的方法。
你的正则表达式不处理很多东西,其中一个是空格后的双引号值。 由于开头没有可选的空白模式,最后一个替代触发器,并以逗号停止。
您可以使用以下正则表达式:
\s*("[^"\\]*(?:\\.[^\\"]*)*"|'[^'\\]*(?:\\.[^\\']*)*'|[^,]+),?
查看正则表达式演示 ,并获取Capture Group 1值。
这是一个IDEONE演示 :
$re = '~\s*("[^"\\\\]*(?:\\\\.[^\\\\"]*)*"|\'[^\'\\\\]*(?:\\\\.[^\\\\\']*)*\'|[^,]+),?~';
$str = "\"test\", 'test2', \$test3, ?\"%A %d %B %Y\", \"foo,bar,foobar\"";
preg_match_all($re, $str, $tokens);
print_r($tokens[1]);
模式说明 :
\\s*
- 零个或多个空格 ("[^"\\\\]*(?:\\\\.[^\\\\"]*)*"|'[^'\\\\]*(?:\\\\.[^\\\\']*)*'|[^,]+)
- 3种替代方案中的任何一种:
"[^"\\\\]*(?:\\\\.[^\\\\"]*)*"
- 双引号字符串(支持转义序列) |
- 要么 '[^'\\\\]*(?:\\\\.[^\\\\']*)*'
- 单引号字符串(支持转义序列) |
- 要么 [^,]+
- 除逗号以外的1+个字符 ,?
- 可选的逗号( ?
- 一次或零次出现)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.