cas: p>
Je veux faire correspondre la ligne 1 (seulement "Bonjour" une fois!) Ne voulez pas correspondre à la ligne 2 (contient 'Hello' plus d'une fois) P>
Essayé d'utiliser un regard négatif à l'avance regarder derrière et ce qui n'est pas ... sans aucun succès réel .. p>
3 Réponses :
Une option simple est ceci (à l'aide du drapeau multiligne et non pas-tous): premier, vérifiez que ne em> n'ai pas "bonjour" deux fois , puis vérifiez que vous l'avez au moins une fois. Bien sûr, vous pouvez faire une correspondance simple pour
Il y a d'autres moyens de vérifier pour la même chose, mais je pense que celui-ci est assez simple. P> \ bhello \ b code> et compter le numéro des matchs ... p> p>
Pourquoi ne pas simplement le trouver une fois et vérifier qu'il n'existe plus après cela? Semble un peu moins répétitif de cette façon.
@Wiseguy - une patten comme ^. * Bonjour (?!. * Bonjour) code> ne fonctionnerait pas, car il correspondra toujours au dernier code> Hello code> de la ligne. Vous auriez besoin de quelque chose comme
^ (? :( ?! Bonjour).) * Bonjour (?!. * Bonjour) code>, qui n'est pas beaucoup plus élégant. J'ai peut-être manqué quelque chose de simple si ...
@Wiseguy - non. Le moteur Regex tente de correspondre à ne pas échouer. Cela peut correspondre, alors ça le fera.
Travaux simples, compréhensibles.
Puisque vous ne vous inquiétez que des mots (jetons c.-à-d. Jetons séparés par WhitSpace), vous pouvez simplement vous séparer des espaces et voir combien de fois la sortie est p> "bonjour" code> apparaît. Puisque vous n'avez pas mentionné une langue, voici une implémentation en Perl:
Une regex générique serait la suivante:
\b(\w+)\b(?=.*?\b\1\b)
Doh, j'ai mal interprété la question, pensée Bonjour code> pourrait être n'importe quel mot, et le but de la regex était de s'assurer qu'aucun mot ne se répète. Laissera la réponse en cas de tout intérêt pour quiconque.