/ / Expression régulière pour correspondre | mais pas || - php, regex

Expression régulière pour correspondre | mais pas || - php, regex

Mon objectif est de scinder une chaîne telle que, a|b||c|d dans a, b||c et d.

J'ai essayé d'utiliser plusieurs méthodes, mais j'ai fini par scinder ma chaîne:

Regarde derrière:

var_dump(preg_split("/\|(?<!\|\|)/", "a|b||c|d"));

array (size=4)
0 => string "a" (length=1)
1 => string "b" (length=1)
2 => string "|c" (length=2)
3 => string "d" (length=1)

Lookahead:

var_dump(preg_split("/(?!\|\|)\|/", "a|b||c|d"));

array (size=4)
0 => string "a" (length=1)
1 => string "b|" (length=2)
2 => string "c" (length=1)
3 => string "d" (length=1)

Comment puis-je ignorer les tubes doubles?

Réponses:

4 pour la réponse № 1

Divisez simplement votre entrée en fonction de la regex ci-dessous, qui utilise des lookarounds négatifs.

(?<!|)|(?!|)

DEMO

| est un méta-caractère spécial dans regex qui agit comme un opérateur logique OU ou d’alternance. Pour correspondre à un littéral | symbole, vous devez échapper à la | dans votre regex comme |


1 pour la réponse № 2

Vous pouvez utiliser cette regex pour scinder:

(?<!|)|(?!|)