假设我在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)
要使用什么正则表达式才能达到预期效果?
答案 0 :(得分:2)
答案 1 :(得分:2)
使用正则表达式使用preg_match_all
可能也很有意义:
/[^|(]+(\([^)]+\))?/
这将捕获不带括号或不带有管道[^(]+
的字符串,并可选地跟随由括号(\([^)]+\))?
封装的段
正则表达式在javascript中进行了演示
var input = "make|aaa|select.aaa|ttt|actived_by(creator.url|test|ali)"
console.log(input.match(/[^|(]+(\([^)]+\))?/g))