Je travaille sur des feuilles Excel très salissant, et d'essayer d'utiliser PHP pour trouver des indices ..PHP preg_replace: trouver une partie de chaîne ne commence pas par un point d'exclamation
J'ai une base de données MySQL avec toutes les formules à partir d'un excel document, et comme d'habitude, les noms de cellule de la feuille actuelle n'ont pas de "nom de feuille!" devant lui. Pour le rendre consultable (et trouver des routes mortes dans les formules) j'aime remplacer toutes les formules dans la base de données avec leur nom de feuille comme préfixe.
Exemple:
=+(sheet_factory_costs!A17/sheet_employees!D23)+T12+W12
La base de données contient le nom de la feuille, et j'aime changer la formule ci-dessus avec cette sheetname (nous appelons de ce « sheet_turnover »).
=+(sheet_factory_costs!A17/sheet_employees!D23)+sheet_turnover!T12+sheet_turnover!W12
J'essaie ceci en PHP avec preg_replace, et je pense que je dois les règles suivantes:
- Trouver une ou deux lettres, suivie directement par un numéro. C'est toujours une adresse de cellule dans les formules.
- Quand il y a un! sur la position avant, il y a déjà un nom de feuille. Donc, je cherche seulement les lettres et les chiffres ne commençant pas par un point d'exclamation.
Le problème semble être que le! est également un signe spécial dans les modèles. Même si je tente d'y échapper, il ne fonctionne pas:
$newformula =
preg_replace('/(?<\!)[A-Z]{1,2}[0-9]/',
'lala',
$oldformula);
(lala est mon marqueur temporaire pour voir si elle est la sélection des bonnes cellules-adresses)
(et oui, la lala est à seulement emplacements sur le premier numéro, mais ce n'est pas question en ce moment)
(et oui, tous Excel $ .. $ .. (permanents) marqueurs ont déjà été remplacés. pas besoin de construire que dans la formule)
Vous devez doubler la barre oblique inverse car il a un sens échappant dans des chaînes, qui « manger » eux. – trincot
En fait, '(? <\!)' Est une construction de regex invalide dans PCRE, si vous l'essayez, vous obtiendrez un avertissement sur une structure de groupe incomplet. Il ne s'agit pas du nombre de barres obliques inverses dont on a besoin ici. –