繁体   English   中英

正则表达式在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM