我在这里发帖是因为我已经在这几个小时内一直在寻找答案,并且在这个网站http://www.regexr.com/上因试用和错误而失去了许多其他答案,以获得最佳的正则表达式。
我找不到任何删除所有逗号的内容,只有第一个功能符号。
#Quick编辑:我将在php脚本上始终将该函数的内容作为字符串,因为我从发起函数调用的文件中复制它。
以下是一个例子:
MyClass::myFunction(
array_merge($params, ['a', 'b', 'c', 'd']),
array_merge(["p01"], ["s01", "s02", "s03"]),
oi("s04", "p02", "p03"),
[["p05", "p06", "p07"],],
[
oi(),
"p04",
["p05", "p06", "p07"],
oi("p08", "p09", "p10", ["s05", "s06", "s07"]),
],
[
"p04",
["p05", "p06", "p07"],
oi("p08", "p09", "p10", ["s05", "s06", "s07"]),
]
)
我想要的只是替换所有的逗号而不是myFunction的那些(将它们分开的那些逗号)。
我已经能够获取myFunction括号内的所有内容,因此您不必处理这些内容。
#Edit:我需要这个的原因是因为我为我的项目开发了一个调试函数,它准确地显示了生成该代码的变量/函数/东西。
oi()函数只是一个随机函数,例如用于此目的。在这种情况下,它将返回一个包含接收参数的数组。
我是这样做的:
示例:
$variable = 'This is a test variable. For the purpose os testing, 2 + 2 is ' . ( 2 + 2 );
MyClass::myFunction($variable);
以上是上述示例的最终结果(因为我无法发布图片,我会输入它):
<pre>
<pre class="source">variable</pre>
<pre class="content"><small>string</small>'This is a test variable. For the purpose os testing, 2 + 2 is 4' <i>(length=63)</i></pre>
</pre>
答案 0 :(得分:0)
感谢您的帮助。
我提出了自己的解决方案。我希望它对任何人都有用。
public static function extractParams($text)
{
$firstOpen = '';
$close = ['(' => ')', '[' => ']', '"' => '"', '\'' => '\''];
$open = ['[', '(', '"', '\''];
$counter = 0;
$splittedString = str_split($text);
$p = '';
$param = [];
foreach ($splittedString as $char) {
$p .= $char;
if (!$firstOpen) {
if (in_array($char, $open)) {
$firstOpen = $char;
$counter = 1;
}
} else {
if ($char === $firstOpen && !in_array($char, ['"', '\''])) {
$counter += 1;
} elseif ($char === $close[$firstOpen]) {
$counter -= 1;
}
if ($counter === 0) {
$param[] = trim(ltrim($p, ','));
$p = '';
$firstOpen = '';
}
}
}
if ($param === []) {
$param[] = trim(ltrim($p, ','));
}
return $param;
}