什么是将 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')
部分替换逗号[仅在括号中的逗号]
也许是这样的:
while (preg_match('/\((.*),(.*)\)/', $foo))
$foo = preg_replace('/\((.*),(.*)\)/', '($1|$2)', $foo);
一个简单的字符串解析器可能比正则表达式更快。演示。
<?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);
?>
这就是我修复它的方式,但仍然对其他解决方案开放
while (preg_match('/\(([^\)]*)\)/', $tableCols)){
$tableCols = preg_replace('/\(([^\)]*)\)/e','"[[[".str_replace(\',\',\'|\',\'$1\')."]]]"', $tableCols);
}
$tableCols = str_replace('[[[', '(', $tableCols);
$tableCols = str_replace(']]]', ')', $tableCols);