0

什么是将 XX(a,s,d,f) 的所有逗号替换为长字符串中的管道的最佳方法,例如

`exp` x(10) XX('s','44','f','dd','sddd') some other text here, text here , other text here

我只想在这XX('s','44','f','dd','sddd')部分替换逗号[仅在括号中的逗号]

4

3 回答 3

2

也许是这样的:

while (preg_match('/\((.*),(.*)\)/', $foo))
    $foo = preg_replace('/\((.*),(.*)\)/', '($1|$2)', $foo);
于 2013-07-11T11:19:11.783 回答
1

一个简单的字符串解析器可能比正则表达式更快。演示

<?php
    $string = "`exp` x(10) XX('s','44','f','dd','sddd') some other text here, text here , other text here";

    $inParentheses = false;
    for ($i = 0; $i < strlen($string); $i++) {
        if ($inParentheses) {
            if ($string[$i] == ")") {
                $inParentheses = false;
            } else if ($string[$i] == ",") {
                $string[$i] = "|"; //The replacement character
            }
        } else if ($string[$i] == "(") {
            $inParentheses = true;
        }
    }

    var_dump($string);
?>
于 2013-07-11T11:38:18.920 回答
0

这就是我修复它的方式,但仍然对其他解决方案开放

while (preg_match('/\(([^\)]*)\)/', $tableCols)){
                $tableCols = preg_replace('/\(([^\)]*)\)/e','"[[[".str_replace(\',\',\'|\',\'$1\')."]]]"', $tableCols);
            }
            $tableCols = str_replace('[[[', '(', $tableCols);
            $tableCols = str_replace(']]]', ')', $tableCols);
于 2013-07-11T12:08:19.867 回答