php - 使用正则表达式分割管道(|)分隔的字符串,但忽略括号中的管道

标签 php regex

假设我在 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/

相关文章:

regex - 从文档中提取信息,训练集不多

php - 根据时间连接到mysql表

php - Haxe PHP 与 PHP - 哪种语言更适合为 WordPress 创建插件?

javascript - 简单的一个 : REGEX to select everything after ' - ' in multi line text

php - 我的正则表达式有多糟糕?

Mysql 正则表达式匹配 <year>、<year_0>、<year_1> 标签中的相同子字符串

python - 零个或一个量词 (`?` ) 似乎并不贪婪

javascript - 滚动到表单并在单击按钮时填写字段

php - 使用 str_replace 是否足以防止 SQL 注入(inject)攻击?

javascript - 如何创建动画实时排行榜?