J'ai une chaîne et j'aimerais connaître la première position d'un motif. Mais cela ne doit être trouvé que, si ce n'est pas enfermé avec des supports.
Exemple String: " je veux Pour connaître la position du second J'ai essayé ceci: p> Ça fonctionne bien, mais le résultat est la position de la première correspondance (11). P> donc j'ai besoin de changer le J'ai essayé de le remplacer par Mais cela ne correspond pas du tout. P> P> Ceci est un (premier) test avec le premier coup code>" p> premier code> => 32. Pour la correspondre, le (premier) code> doit être ignoré, car il est enfermé entre parenthèses. P> . *? code>. p> . (?: \ \ \)) *? Code> Dans l'espoir, Tous les caractères à l'intérieur des supports seront ignorés. P>
4 Réponses :
Vous pouvez utiliser l'expression régulière
Essayez Démo P> \ (premier \) (* Skip) (* échouez) | Premier code> P>
Belle! Ma seule suggestion est de changer | premier code> à | \ bfirst \ b code> de sorte que d'abord code> n'est pas assorti. La plupart des lecteurs, y compris celui-ci, ne comprendront pas les fonctions de (* Skip) code> et (* échoue) code>. Je suis sûr que nous apprécierions tous une explication (avec une édition de votre réponse).
Ceci pourrait fonctionner (premier) strong> est ignoré mais {premier} ou [premier] sera assorti (uniquement le premier mot). XXFirstXX est également ignoré en raison de la limite de mot Un autre échantillon p> p>
Un problème: cela ne correspond pas au deuxième premier code> dans le (premier) est le (première fois code>.
Essayez ceci: \ bfirst (?! \)) | (? . Demo
'/ ^ (. *?) (premier) (?! [^ ()] * \)) /' code>