Mon modèle actuel est le suivant:PHP Regex match soit sur ou un mot sans utiliser de crochets?
pattern=("/(.*)(\bIf you want\b)(.*)/iu");
Mais avec:
preg_replace($pattern, '$1*$2*$3', $result);
Ainsi, les trois parties doivent être remplacés car ils sont le 1 $, 2 $ et 3 $, mais je veux permettre une plus grande flexibilité donc je peux détecter par exemple ces deux lignes:
If you want
If I want
donc je pourrais simplement faire ceci:
pattern=("/(.*)(\bIf (I|you) want\b)(.*)/iu");
mais cela crée un problème puisque j'ai besoin de remplacer $ 1, $ 2 et $ 3. Les motifs sont insérés dynamiquement et sont donc toutes différentes:
$pattern = "/(.*)(\b".$value."\b)(.*)/iu";
La valeur $ a parfois un modificateur comme dans l'exemple ci-dessus « si (vous | I) voulez », mais d'autres motifs peuvent être simplement « ce qui est arrivé à côté » sans modificateur. Donc, les crochets supplémentaires causent un problème, mais je ne peux pas trouver un autre moyen de le faire.
EDIT: Veuillez noter que le problème est ici avec le preg_replace $ 1, $ 2 et $ 3. Avec un modèle comme
"/(.*)(\bwhat happened next\b)(.*)/iu"
cela va bien à travers, mais avec un support supplémentaire comme avec
"/(.*)(\bIf (I|you) want\b)(.*)/iu"
il ne remplacera pas correctement avec le 1 $, 2 $ et 3 $ preg_replace.
Aussi je me rends compte qu'il peut être fait comme ça
If you want|If I want
Mais ce ne est pas particulièrement éloquent!
Voulez-vous dire que $ value' peut contenir un motif défini par l'utilisateur? Vous ne pouvez pas utiliser des groupes qui ne capturent pas - '" /(.*)(\bIf (?: Je | vous) veux \ b) (. *)/Iu "' –
Vous ne savez pas exactement ce que vous voulez dire. Le problème vient dans le preg_replace où il remplace les trois requêtes entre crochets avec $ 1, $ 2 et $ 3. Si vous ajoutez un autre support * parfois *, cela ne fonctionnera évidemment pas correctement. C'est pourquoi je dois le faire potentiellement sans crochets ... ou il doit y avoir un autre moyen. – Hasen
Vous souhaitez obtenir une sous-chaîne depuis le début de la chaîne jusqu'à la correspondance, puis la correspondance, puis le texte après la correspondance? Attendez-vous un seul match dans une chaîne? –