-1
votes

Correspondre à un motif en ignorant les crochets

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: " Ceci est un (premier) test avec le premier coup "

je veux Pour connaître la position du second premier => 32. Pour la correspondre, le (premier) doit être ignoré, car il est enfermé entre parenthèses.

J'ai essayé ceci: xxx

Ça fonctionne bien, mais le résultat est la position de la première correspondance (11).

donc j'ai besoin de changer le . *? .

J'ai essayé de le remplacer par . (?: \ \ \)) *? Dans l'espoir, Tous les caractères à l'intérieur des supports seront ignorés.

Mais cela ne correspond pas du tout.


1 commentaires

'/ ^ (. *?) (premier) (?! [^ ()] * \)) /'


4 Réponses :


2
votes
/(?<!\()first/

1 commentaires

Cela manque plusieurs matchs. Avez-vous testé? Demo




0
votes

1 commentaires

Belle! Ma seule suggestion est de changer | premier à | \ bfirst \ b de sorte que d'abord n'est pas assorti. La plupart des lecteurs, y compris celui-ci, ne comprendront pas les fonctions de (* Skip) et (* échoue) . Je suis sûr que nous apprécierions tous une explication (avec une édition de votre réponse).



0
votes

Ceci pourrait fonctionner xxx

(premier) est ignoré mais {premier} ou [premier] sera assorti (uniquement le premier mot). XXFirstXX est également ignoré en raison de la limite de mot \ b

Un autre échantillon


2 commentaires

Un problème: cela ne correspond pas au deuxième premier dans le (premier) est le (première fois .


Essayez ceci: \ bfirst (?! \)) | (? . Demo