假设我在 php(laravel) 中有一个这样的字符串:
make|aaa|select.aaa|ttt|actived_by(creator.url|test|ali)
现在我想将其转换为这样的数组:
make
aaa
select.aaa
tttt
actived_by(creator.url|test|ali)
正如您所看到的,只有未包含在用于分隔的括号中的管道符号。
为此我编写了一个这样的函数:
function parseQuery($query) {
preg_match_all("/[^\|]+/", $query, $match);
return $match;
}
但它有以下输出:
make
aaa
select.aaa
ttt
actived_by(creator.url
test
ali)
什么是正确的正则表达式来获得所需的结果?
最佳答案
除了拆分之外,使用以下正则表达式使用 preg_match_all
也可能有意义:
/[^|(]+(\([^)]+\))?/
这将捕获没有括号或管道的字符串[^(]+
,可选地后跟由括号封装的部分(\([^)]+\))?
正则表达式在 javascript 中进行了演示
var input = "make|aaa|select.aaa|ttt|actived_by(creator.url|test|ali)"
console.log(input.match(/[^|(]+(\([^)]+\))?/g))
关于php - 使用正则表达式分割管道(|)分隔的字符串,但忽略括号中的管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52931444/