替换所有逗号但主要功能是什么?

时间:2014-08-13 13:43:20

标签: javascript php regex

我在这里发帖是因为我已经在这几个小时内一直在寻找答案,并且在这个网站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);
  1. 执行该函数后,我得到函数调用params with debug_backtrace()。
  2. 我从执行它的文件中复制被调用函数的全部内容,所以我把它作为字符串。
  3. 我只获取函数内部的内容,删除了MyClass :: myFunction(以及最后一个)。
  4. 我用逗号分解结果来获取函数的所有参数,但是以这种方式,我爆炸了我无法爆炸的逗号。我需要一种方法来找到我需要爆炸的逗号。
  5. 以上是上述示例的最终结果(因为我无法发布图片,我会输入它):

    <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>
    

1 个答案:

答案 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;
}